BR112021009922A2 - Método de construir uma lista de mesclagens candidata para modo de cópia de intrabloco, codificador, decodificador, produto de programa de computador e dispositivo de decodificação de dados de vídeo - Google Patents

Método de construir uma lista de mesclagens candidata para modo de cópia de intrabloco, codificador, decodificador, produto de programa de computador e dispositivo de decodificação de dados de vídeo Download PDF

Info

Publication number
BR112021009922A2
BR112021009922A2 BR112021009922-0A BR112021009922A BR112021009922A2 BR 112021009922 A2 BR112021009922 A2 BR 112021009922A2 BR 112021009922 A BR112021009922 A BR 112021009922A BR 112021009922 A2 BR112021009922 A2 BR 112021009922A2
Authority
BR
Brazil
Prior art keywords
block
vector
ibc
block vector
candidate
Prior art date
Application number
BR112021009922-0A
Other languages
English (en)
Inventor
Han Gao
Semih ESENLIK
Biao Wang
Anand Meher KOTRA
Jianle Chen
Original Assignee
Huawei Technologies Co., Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co., Ltd filed Critical Huawei Technologies Co., Ltd
Publication of BR112021009922A2 publication Critical patent/BR112021009922A2/pt

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/11Selection of coding mode or of prediction mode among a plurality of spatial predictive coding modes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors
    • H04N19/517Processing of motion vectors by encoding
    • H04N19/52Processing of motion vectors by encoding by predictive encoding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/105Selection of the reference unit for prediction within a chosen coding or prediction mode, e.g. adaptive choice of position and number of pixels used for prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/593Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial prediction techniques
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards

Landscapes

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

Abstract

método de construir uma lista de mesclagens candidata para modo de cópia de intrabloco, codificador, decodificador, produto de programa de computador e dispositivo de decodificação de dados de vídeo. a presente invenção refere-se a métodos e dispositivos de construir uma lista de mesclagens candidata para modo de cópia de intrabloco, ibc, o método compreendendo: inserir um vetor de bloco de um bloco vizinho esquerdo de um bloco corrente em uma lista de mesclagens inicial do bloco corrente, quando o bloco vizinho esquerdo está disponível e o bloco vizinho esquerdo está utilizando o modo de ibc; inserir um vetor de bloco de um bloco vizinho superior do bloco corrente na lista de mesclagens inicial, quando o bloco vizinho superior está disponível, o bloco vizinho superior está utilizando o modo de ibc e o vetor de bloco do bloco vizinho superior não for o mesmo que o vetor de bloco do bloco vizinho esquerdo; inserir um vetor de bloco do último candidato em um preditor de vetor de movimento baseado em histórico, hmvp na lista de mesclagens inicial, quando o vetor de bloco do bloco vizinho superior não for o mesmo que o vetor de bloco do último candidato no hmvp e quando o vetor de bloco do bloco vizinho esquerdo não for o mesmo que o vetor de bloco do último candidato no hmvp; obter um vetor de bloco do bloco corrente de acordo com a lista de mesclagens inicial após os processos de inserção acima e um índice de candidato de mesclagem para o bloco corrente.

Description

Relatório Descritivo da Patente de Invenção para "MÉTODO
DE CONSTRUIR UMA LISTA DE MESCLAGENS CANDIDATA PARA MODO DE CÓPIA DE INTRABLOCO, CODIFICADOR, DECODIFICADOR, PRODUTO DE PROGRAMA DE COMPUTADOR E DISPOSITIVO DE DECODIFICAÇÃO DE DADOS DE VÍDEO". CAMPO DA TÉCNICA
[001] As modalidades do presente pedido (descrição) geralmente referem-se ao campo de processamento de imagem e mais especificamente a uma lista compartilhada para predição.
ANTECEDENTES
[002] A codificação de vídeo (codificação e decodificação de vídeo) é utilizada em uma ampla gama de aplicações de vídeo digital, por exemplo, TV digital de transmissão, transmissão de vídeo pela Internet e redes móveis, aplicações de conversação em tempo real tal como chat de vídeo, videoconferência, discos DVD e Blu-ray, sistemas de aquisição e edição de conteúdo de vídeo, e filmadoras de aplicações de segurança.
[003] A quantidade de dados de vídeo necessária para apresentar mesmo um vídeo relativamente curto pode ser substancial, o que pode resultar em dificuldades quando os dados devem ser transmitidos ou de outro modo comunicados através de uma rede de comunicações com capacidade de largura de banda limitada. Assim, os dados de vídeo são geralmente comprimidos antes de serem comunicados através redes de telecomunicações dos dias modernos. O tamanho de um vídeo pode também ser um problema quando o vídeo é armazenado em um dispositivo de armazenamento porque os recursos de memória podem ser limitados. Os dispositivos de compressão de vídeo frequentemente utilizam software e/ou hardware na fonte para codificar os dados de vídeo antes da transmissão ou armazenamento, por meio disto diminuindo a quantidade de dados necessária para representar as imagens de vídeo digital. Os dados comprimidos são então recebidos no destino por um dispositivo de descompressão de vídeo que decodifica os dados de vídeo. Com recursos de rede limitados e demandas sem crescente de qualidade de vídeo mais alta, técnicas de compressão e descompressão aperfeiçoadas que aperfeiçoam a taxa de compressão com pouco ou nenhum sacrifício na qualidade de imagem são desejáveis.
SUMÁRIO
[004] As modalidades do presente pedido proveem aparelhos e métodos para codificação e decodificação de acordo com as reivindicações independentes.
[005] Os acima e outros objetos são conseguidos pelo assunto das reivindicações independentes. Formas de implementação adicionais são aparentes das reivindicações dependentes, da descrição e das figuras.
[006] O primeiro aspecto da invenção descreve um método de construir uma lista de mesclagem candidata para modo de cópia de intrabloco, IBC, o método compreendendo:
[007] inserir um vetor de bloco de um bloco vizinho esquerdo de um bloco corrente em uma lista de mesclagem inicial do bloco corrente (em um exemplo, a lista de mesclagem inicial é uma lista vazia antes desta etapa de inserção), quando o bloco vizinho esquerdo está disponível e o bloco vizinho esquerdo está utilizando o modo de IBC;
[008] inserir um vetor de bloco de um bloco vizinho superior ao bloco corrente na lista de mesclagem inicial (em um exemplo, a lista de mesclagem inicial é uma lista vazia antes desta etapa, ou a lista de mesclagem inicial compreende um vetor de bloco de um bloco vizinho esquerdo de um bloco corrente), quando o bloco vizinho superior está disponível, o bloco vizinho superior está utilizando o modo de IBC e o vetor de bloco do bloco vizinho superior não é o mesmo que o vetor de bloco do bloco vizinho esquerdo;
[009] inserir um vetor de bloco do último candidato em um preditor de vetor de movimento baseado em histórico, HMVP na lista de mesclagem inicial, quando o vetor de bloco do bloco vizinho superior não é o mesmo que o vetor de bloco do último candidato no HMVP e quando o vetor de bloco do bloco vizinho esquerdo não é o mesmo que o vetor de bloco do último candidato no HMVP.
[0010] O segundo aspecto da invenção descreve um método de construir uma lista de mesclagem candidata para modo de cópia de intrabloco, IBC, o método compreendendo:
[0011] inserir um vetor de bloco de um bloco vizinho de um bloco corrente em uma lista de mesclagem inicial do bloco corrente, quando o bloco vizinho está disponível e o bloco vizinho está utilizando o modo de IBC;
[0012] inserir um vetor de bloco do último candidato em um preditor de vetor de movimento baseado em histórico, HMVP na lista de mesclagem inicial, quando o vetor de bloco do bloco vizinho não é o mesmo que o vetor de bloco do último candidato no HMVP;
[0013] inserir um vetor de bloco de outro candidato no HMVP na lista de mesclagem inicial, em que a poda para o vetor de bloco de outro candidato no HMVP é removida.
[0014] O terceiro aspecto da invenção descreve um método de construir uma lista de mesclagem candidata para modo de cópia de intrabloco, IBC, o método compreendendo:
[0015] inserir um vetor de bloco de um bloco vizinho esquerdo de um bloco corrente em uma lista de mesclagem inicial do bloco corrente (em um exemplo, a lista de mesclagem inicial é uma lista vazia antes desta etapa de inserção), quando o bloco vizinho esquerdo está disponível e o bloco vizinho esquerdo está utilizando o modo de IBC;
[0016] inserir um vetor de bloco de um bloco vizinho superior do bloco corrente na lista de mesclagem inicial (em um exemplo, a lista de mesclagem inicial é uma lista vazia antes desta etapa, ou a lista de mesclagem inicial compreende um vetor de bloco de um bloco vizinho esquerdo de um bloco corrente), quando o bloco vizinho superior está disponível, o bloco vizinho superior está utilizando o modo de IBC e o vetor de bloco do bloco vizinho superior não é o mesmo que o vetor de bloco do bloco vizinho esquerdo;
[0017] inserir um vetor de bloco do último candidato em um preditor de vetor de movimento baseado em histórico, HMVP na lista de mesclagem inicial, quando o vetor de bloco do bloco vizinho superior não é o mesmo que o vetor de bloco do último candidato no HMVP e quando o vetor de bloco do bloco vizinho esquerdo não é o mesmo que o vetor de bloco do último candidato no HMVP;
[0018] inserir um vetor de bloco de outro candidato no HMVP na lista de mesclagem inicial, em que a poda para o vetor de bloco de outro candidato no HMVP é removida.
[0019] O quarto aspecto da invenção descreve um método de construir uma lista de mesclagem candidata para modo de cópia de intrabloco, IBC, o método compreendendo:
[0020] inserir um vetor de bloco de um bloco vizinho de um bloco corrente em uma lista de mesclagem inicial do bloco corrente, quando o bloco vizinho está disponível e o bloco vizinho está utilizando o modo de IBC;
[0021] inserir um vetor de bloco de candidato em um preditor de vetor de movimento baseado em histórico, HMVP na lista de mesclagem inicial, quando o vetor de bloco do bloco vizinho não é o mesmo que o vetor de bloco do último candidato no HMVP;
[0022] em que o último vetor de bloco na lista de mesclagem inicial do bloco corrente é um vetor de bloco de um candidato no HMVP.
[0023] O quinto aspecto da invenção descreve um método de construir uma lista de mesclagem candidata para modo de cópia de intrabloco, IBC, o método compreendendo:
[0024] inserir um vetor de bloco de um bloco vizinho esquerdo de um bloco corrente em uma lista de mesclagem inicial do bloco corrente (em um exemplo, a lista de mesclagem inicial é uma lista vazia antes desta etapa de inserção), quando o bloco vizinho esquerdo está disponível e o bloco vizinho esquerdo está utilizando o modo de IBC;
[0025] inserir um vetor de bloco de um bloco vizinho superior do bloco corrente na lista de mesclagem inicial (em um exemplo, a lista de mesclagem inicial é uma lista vazia antes desta etapa, ou a lista de mesclagem inicial compreende um vetor de bloco de um bloco vizinho esquerdo de um bloco corrente), quando o bloco vizinho superior está disponível, o bloco vizinho superior está utilizando o modo de IBC e o vetor de bloco do bloco vizinho superior não é o mesmo que o vetor de bloco do bloco vizinho esquerdo;
[0026] inserir um vetor de bloco de último candidato em um preditor de vetor de movimento baseado em histórico, HMVP na lista de mesclagem inicial, quando o vetor de bloco do bloco vizinho superior não é o mesmo que o vetor de bloco do último candidato no HMVP e quando o vetor de bloco do bloco vizinho esquerdo não é o mesmo que o vetor de bloco do último candidato no HMVP;
[0027] inserir um vetor de bloco de outro candidato no HMVP na lista de mesclagem inicial, em que a poda para o vetor de bloco de outro candidato no HMVP é removida, e
[0028] em que o último vetor de bloco na lista de mesclagem inicial do bloco corrente é o vetor de bloco do outro candidato no HMVP.
[0029] Em uma possível implementação para qualquer um do primeiro aspecto até o quinto aspecto, o método ainda compreende: obter um vetor de bloco do bloco corrente de acordo com a lista de mesclagem inicial após os processos de inserção acima e um índice de candidato de mesclagem para o bloco corrente.
[0030] Em uma possível implementação para qualquer um do primeiro aspecto até o quinto aspecto, em que a lista de mesclagem inicial é uma lista vazia antes do primeiro processo de inserção.
[0031] Em uma possível implementação para qualquer um do primeiro aspecto até o quinto aspecto, os processos de inserção acima são executados ordenadamente.
[0032] O sexto aspecto da invenção descreve um codificador 20 que compreende um circuito de processamento para executar qualquer uma das modalidades de método anteriores.
[0033] O sétimo aspecto da invenção descreve um decodificador 30 que compreende um circuito de processamento para executar qualquer uma das modalidades de método anteriores.
[0034] O oitavo aspecto da invenção descreve um produto de programa de computador que compreende um código de programa para executar qualquer uma das modalidades de método anteriores.
[0035] O nono aspecto da invenção descreve um decodificador ou um codificador, que compreende:
[0036] um ou mais processadores; e
[0037] um meio de armazenamento legível por computador não transitório acoplado nos processadores e armazenando uma programação para execução pelos processadores, em que a programação, quando executada pelos processadores, configura o decodificador para executar qualquer uma das modalidades de método anteriores.
[0038] Os detalhes de uma ou mais modalidades são apresentados nos desenhos acompanhantes e na descrição abaixo. Outras características, objetos, e vantagens serão aparentes da descrição, desenhos, e reivindicações.
BREVE DESCRIÇÃO DOS DESENHOS
[0039] A seguir as modalidades da invenção serão descritas em mais detalhes com referência às figuras e desenhos anexos, nos quais:
[0040] Figura 1A é um diagrama de blocos que mostra um exemplo de um sistema de codificação de vídeo configurado para implementar as modalidades da invenção;
[0041] Figura 1B é um diagrama de blocos que mostra outro exemplo de um sistema de codificação de vídeo configurado para implementar as modalidades da invenção;
[0042] Figura 2 é um diagrama de blocos que mostra um exemplo de um codificador de vídeo configurado para implementar as modalidades da invenção;
[0043] Figura 3 é um diagrama de blocos que mostra uma estrutura exemplar de um decodificador de vídeo configurado para implementar as modalidades da invenção;
[0044] Figura 4 é um diagrama de blocos que ilustra um exemplo de um aparelho de codificação ou um aparelho de decodificação;
[0045] Figura 5 é um diagrama de blocos que ilustra outro exemplo de um aparelho de codificação ou um aparelho de decodificação;
[0046] Figura 6 é um diagrama de blocos que ilustra um exemplo de blocos vizinhos de um bloco corrente;
[0047] Figura 7 mostra um exemplo sobre uma modalidade do presente pedido;
[0048] Figura 8 é um diagrama de blocos que mostra uma estrutura exemplar de um sistema de suprimento de conteúdo 3100 o qual realiza um serviço de fornecimento de conteúdo;
[0049] Figura 9 é um diagrama de blocos que mostra uma estrutura de um exemplo de um dispositivo de terminal.
[0050] A seguir símbolos de referência idênticos referem-se a características idênticas ou pelo menos funcionalmente equivalentes se não explicitamente especificado de outro modo.
DESCRIÇÃO DETALHADA DAS MODALIDADES
[0051] Na descrição seguinte, referência é feita às figuras acompanhantes, as quais formam parte da descrição, e as quais mostram, por meio de ilustração, aspectos específicos de modalidades da invenção ou aspectos específicos nos quais as modalidades da presente invenção podem ser utilizadas. É compreendido que as modalidades da invenção podem ser utilizadas em outros aspectos e compreendem mudanças estruturais ou lógicas não apresentadas nas figuras. A descrição detalhada seguinte, portanto, não deve ser tomada em um sentido limitante, e o escopo da presente invenção é definido pelas reivindicações anexas.
[0052] Por exemplo, é compreendido que uma descrição em conexão com um método descrito pode também ser verdadeira para um dispositivo ou sistema correspondente configurado para executar o método e vice-versa. Por exemplo, se uma ou uma pluralidade de etapas de método específicas forem descritas, um dispositivo correspondente pode incluir uma ou uma pluralidade de unidades, por exemplo, unidades funcionais, para executar a descrita ou pluralidade de etapas de método (por exemplo, uma unidade executando uma ou a pluralidade de etapas, ou uma pluralidade de unidades, cada uma executando uma ou mais da pluralidade de etapas), mesmo se tais uma ou mais unidades não forem explicitamente descritas ou ilustradas nas figuras. Por outro lado, por exemplo, se um aparelho específico for descrito com base em uma ou uma pluralidade de unidades, por exemplo, unidades funcionais, um método correspondente pode incluir uma etapa para executar a funcionalidade de uma ou da pluralidade de unidades (por exemplo, uma etapa executando a funcionalidade de uma ou da pluralidade de unidades, ou uma pluralidade de etapas, cada uma executando a funcionalidade de uma ou mais da pluralidade de unidades), mesmo se tais uma ou pluralidade de etapas não forem explicitamente descritas ou ilustradas nas figuras. Ainda, é compreendido que as características das várias modalidades e/ou aspectos exemplares aqui descritos podem ser combinadas umas com as outras, a menos que especificamente notado de outro modo.
[0053] A codificação de vídeo tipicamente refere-se ao processamento de uma sequência de imagens, a qual forma o vídeo ou sequência de vídeos. Ao invés do termo "figura", o termo "quadro" ou "imagem" podem ser utilizados como sinônimos no campo de codificação de vídeo. A codificação de vídeo (ou codificação em geral) compreende duas partes de codificação e decodificação de vídeo. A codificação de vídeo é executada no lado de fonte, tipicamente compreendendo processar (por exemplo, por compressão) as imagens de vídeo originais para reduzir a quantidade de dados requerida para representar as imagens de vídeo (para um armazenamento e/ou transmissão mais eficiente). A decodificação do vídeo é executada no lado de destino e tipicamente compreende o processamento inverso comparado com o codificador para reconstruir as imagens do vídeo. As modalidades que referem à "codificação" de imagens de vídeo (ou imagens em geral) devem ser compreendidas referir à "codificação" ou "decodificação" de imagens de vídeo ou respectivas sequências de vídeo. A combinação da parte de codificação e da parte de decodificação é também referida como CODEC (Codificação e Decodificação).
[0054] No caso de codificação de vídeo sem perdas, as imagens de vídeo originais podem ser reconstruídas, isto é, as imagens de vídeo reconstruídas têm a mesma qualidade que as imagens de vídeo originais (assumindo nenhuma perda de transmissão ou outra perda de dados durante o armazenamento ou transmissão). No caso de codificação de vídeo com perdas, uma compressão adicional, por exemplo, por quantização, é executada, para reduzir a quantidade de dados que representam as imagens de vídeo, as quais não podem ser completamente reconstruídas no decodificador, isto é, a qualidade das imagens de vídeo reconstruídas é inferior ou pior comparada com a qualidade das imagens de vídeo originais.
[0055] Diversos padrões de codificação de vídeo pertencem ao grupo de "codecs de vídeo híbridos com perdas" (isto é, combinam predição espacial e temporal no domínio de amostra e codificação de transformada 2D para aplicar a quantização no domínio de transformada). Cada imagem de uma sequência de vídeo é tipicamente particionada em um conjunto de blocos não sobrepostos e a codificação é tipicamente executada em um nível de bloco. Em outras palavras, no codificador o vídeo é tipicamente processado, isto é, codificado, em um nível de bloco (bloco de vídeo), por exemplo, utilizando predição espacial (intraimagem) predição e/ou predição temporal (interimagem) para gerar um bloco de predição, subtraindo o bloco de predição do bloco corrente (bloco correntemente processado/a ser processado) para obter um bloco residual, transformar o bloco residual e quantizar o bloco residual no domínio de transformada para reduzir a quantidade de dados a serem transmitidos (compressão), enquanto que no decodificador o processamento inverso comparado com o codificador é aplicado no bloco codificado ou comprimido para reconstruir o bloco corrente para representação. Mais ainda, o codificador duplica o loop de processamento de decodificador de modo que ambos gerarão predições idênticas (por exemplo, intra e interpredições) e/ou reconstruções para processamento, isto é, codificação, dos blocos subsequentes.
[0056] Nas seguintes modalidades de um sistema de codificação de vídeo 10, um codificador de vídeo 20 e um decodificador de vídeo 30 estão descritos com base nas Figuras 1 a 3.
[0057] Figura 1A é um diagrama de blocos esquemático que ilustra um sistema de codificação exemplar 10, por exemplo, um sistema de codificação de vídeo 10 (ou sistema de codificação 10 abreviado) que pode utilizar as técnicas deste presente pedido. O codificador de vídeo 20 (ou codificador 20 abreviado) e o decodificador de vídeo 30 (ou decodificador 30 abreviado) do sistema de codificação de vídeo 10 representam exemplos de dispositivos que podem estar configurados para executar as técnicas de acordo com vários exemplos descritos no presente pedido.
[0058] Como mostrado na Figura 1A, o sistema de codificação 10 compreende um dispositivo de fonte 12 configurado para prover dados de imagem codificados 21 por exemplo, para um dispositivo de destino 14 para decodificar os dados de imagem codificados 13.
[0059] O dispositivo de fonte 12 compreende um codificador 20, e pode além disso, isto é, opcionalmente, compreender uma fonte de imagens 16, um pré-processador (ou unidade de pré-processamento) 18, por exemplo, a imagem pré-processador de imagem 18, e uma interface de comunicação ou unidade de comunicação 22.
[0060] A fonte de imagens 16 pode compreender ou ser qualquer tipo de dispositivo de captura de imagem, por exemplo, uma câmera para capturar uma imagem do mundo real, e/ou qualquer tipo de um dispositivo de geração de imagem, por exemplo, um processador gráfico de computador para gerar uma imagem animada de computador, ou qualquer tipo de outro dispositivo para obter e/ou prover uma imagem do mundo real, uma imagem gerada por computador (por exemplo, um conteúdo de tela, a imagem de realidade virtual (VR)) e/ou qualquer sua combinação (por exemplo, uma imagem de realidade aumentada (AR)). A fonte de imagens pode ser qualquer tipo de memória ou armazenamento que armazena qualquer das imagens acima mencionadas.
[0061] Em distinção ao pré-processador 18 e o processamento executado pela unidade de pré-processamento 18, a imagem ou dados de imagem 17 podem também ser referidos como imagem bruta ou dados de imagem brutos 17.
[0062] O pré-processador 18 está configurado para receber os dados de imagem (brutos) 17 e executar pré-processamento sobre os dados de imagem 17 para obter uma imagem pré-processada 19 ou dados de imagem pré-processados 19. O pré-processamento executado pela pré-processador 18 pode, por exemplo, compreender recorte, conversão de formato de cor (por exemplo, de RGB para YCbCr), correção de cor, ou retirada de ruído. Pode ser compreendido que a unidade de pré-processamento 18 pode ser um componente opcional.
[0063] O codificador de vídeo 20 está configurado para receber os dados de imagem pré-processados 19 e prover dados de imagem codificados 21 (detalhes adicionais serão abaixo descritos, por exemplo, com base na Figura 2).
[0064] A interface de comunicação 22 do dispositivo de fonte 12 pode estar configurada para receber os dados de imagem codificados 21 e para transmitir os dados de imagem codificados 21 (ou qualquer sua versão adicionalmente processada) pelo canal de comunicação 13 para outro dispositivo, por exemplo, o dispositivo de destino 14 ou qualquer outro dispositivo, para armazenamento ou reconstrução direta.
[0065] O dispositivo de destino 14 compreende um decodificador 30 (por exemplo, um decodificador de vídeo 30), e pode além disso, isto é, opcionalmente, compreender uma interface de comunicação ou unidade de comunicação 28, um pós-processador 32 (ou unidade de pós- processamento 32) e um dispositivo de display 34.
[0066] A interface de comunicação 28 do dispositivo de destino 14 está configurada para receber os dados de imagem codificados 21 (ou qualquer sua versão adicionalmente processada), por exemplo,
diretamente do dispositivo de fonte 12 ou de qualquer outra fonte, por exemplo, um armazenamento dispositivo, por exemplo, um dispositivo de armazenamento de dados de imagem codificados, e prover os dados de imagem codificados 21 para o decodificador 30.
[0067] A interface de comunicação 22 e a interface de comunicação 28 podem estar configuradas para transmitir ou receber os dados de imagem codificados 21 ou dados codificados 13 através de uma conexão de comunicação direta entre o dispositivo de fonte 12 e o dispositivo de destino 14, por exemplo, uma conexão com fio ou sem fio direta, ou através de qualquer tipo de rede, por exemplo, uma rede com fio ou sem fio ou qualquer sua combinação, ou qualquer tipo de rede privada e pública, ou qualquer tipo de sua combinação.
[0068] A interface de comunicação 22 pode estar, por exemplo, configurada para empacotar os dados de imagem codificados 21 em um formato apropriado, por exemplo, pacotes, e/ou processar os dados de imagem codificados utilizando qualquer tipo de codificação ou processamento de transmissão para transmissão por uma conexão de comunicação ou rede de comunicação.
[0069] A interface de comunicação 28, que forma a contraparte da interface de comunicação 22, pode estar, por exemplo, configurada para receber os dados transmitidos e processar os dados de transmissão utilizando qualquer tipo de decodificação ou processamento de transmissão correspondente e/ou desempacotamento para obter os dados de imagem codificados 21.
[0070] Tanto a interface de comunicação 22 quanto a interface de comunicação 28 podem estar configuradas como interfaces de comunicação unidirecionais como indicado pela seta para o canal de comunicação 13 na Figura 1A apontando do dispositivo de fonte 12 para o dispositivo de destino 14, ou interfaces de comunicação bidirecionais, e podem estar configuradas, por exemplo, para enviar e receber mensagens, por exemplo, para estabelecer uma conexão, para confirmar e trocar quaisquer outras informações relativas à conexão de comunicação e/ou transmissão de dados, por exemplo, transmissão dados de imagem codificados.
[0071] O decodificador 30 está configurado para receber os dados de imagem codificados 21 e provê os dados de imagem decodificados 31 ou uma imagem decodificada 31 (detalhes adicionais serão abaixo descritos, por exemplo, com base na Figura 3 ou Figura 5).
[0072] O pós-processador 32 do dispositivo de destino 14 está configurado para pós-processar os dados de imagem decodificados 31 (também denominados dados de imagem reconstruídos), por exemplo, a imagem decodificada 31, para obter dados de imagem pós- processados 33, por exemplo, uma imagem pós-processada 33. O pós- processamento executado pela unidade de pós-processamento 32 pode compreender, por exemplo, conversão de formato de cor (por exemplo, de YCbCr para RGB), correção de cor, recorte, ou reamostragem, ou qualquer outro processamento, por exemplo, para preparar os dados de imagem decodificados 31 para exibição, por exemplo, pelo dispositivo de display 34.
[0073] O dispositivo de display 34 do dispositivo de destino 14 está configurado para receber os dados de imagem pós-processados 33 para exibir a imagem, por exemplo, para um usuário ou espectador. O dispositivo de display 34 pode ser ou compreender qualquer tipo de display para representar a imagem reconstruída, por exemplo, um display ou monitor integrado ou externo. Os displays podem, por exemplo, compreender displays de cristal líquido (LCD), displays de díodos de emissão de luz orgânicos (OLED), displays de plasma, projetores, displays de micro LED, cristal líquido em silício (LCoS), processador de luz digital (DLP) ou qualquer tipo de outro display.
[0074] Apesar da Figura 1A apresentar o dispositivo de fonte 12 e o dispositivo de destino 14 como dispositivos separados, as modalidades de dispositivos podem também compreender ambos ou ambas funcionalidades, o dispositivo de fonte 12 ou a funcionalidade correspondente e o dispositivo de destino 14 ou a funcionalidade correspondente. Em tais modalidades, o dispositivo de fonte 12 ou a funcionalidade correspondente e o dispositivo de destino 14 ou a funcionalidade correspondente podem ser implementados utilizando o mesmo hardware e/ou software por hardware e/ou software separados ou qualquer sua combinação.
[0075] Como será aparente para a pessoa versada na técnica com base na descrição, a existência e divisão (exata) de funcionalidades das diferentes unidades ou funcionalidades dentro do dispositivo de fonte 12 e/ou dispositivo de destino 14 como mostrado na Figura 1A pode variar dependendo do dispositivo e aplicação reais.
[0076] O codificador 20 (por exemplo, um codificador de vídeo 20) ou o decodificador 30 (por exemplo, um decodificador de vídeo 30) ou tanto o codificador 20 quanto o decodificador 30 podem ser implementados através de um circuito de processamento como mostrado na Figura 1B, tal como um ou mais microprocessadores, processadores de sinal digital (DSPs), circuitos integrados de aplicação específica (ASICs), redes de portas programáveis no campo (FPGAs), lógica discreta, hardware, codificação de vídeo dedicada ou quaisquer suas combinações. O codificador 20 pode ser implementado através do circuito de processamento 46 para incorporar os vários módulos como discutido com relação ao codificador 20 da Figura 2 e/ou qualquer outro sistema ou subsistema de codificador aqui descrito. O decodificador 30 pode ser implementado através do circuito de processamento 46 para incorporar os vários módulos como discutido com relação ao decodificador 30 da Figura 3 e/ou qualquer outro sistema ou subsistema de decodificador aqui descrito. O circuito de processamento pode estar configurado para executar as várias operações como posteriormente discutido. Como descrito na Figura 5, se as técnicas forem implementadas parcialmente em software, um dispositivo pode armazenar instruções para o software em um meio de armazenamento legível por computador não transitório, adequado e pode executar as instruções em hardware utilizando um ou mais processadores para executar as técnicas desta descrição. Tanto o codificador de vídeo 20 quanto o decodificador de vídeo 30 podem ser integrados como parte de um codificador/decodificador (CODEC) combinado em um único dispositivo, por exemplo, como mostrado na Figura 1B.
[0077] Dispositivo de fonte 12 e dispositivo de destino 14 pode compreender qualquer um de uma ampla gama de dispositivos, incluindo qualquer tipo de dispositivos portáteis ou estacionários, por exemplo, computadores notebooks ou laptops, telefones móveis, smartphones, tablets ou computadores tablet, câmeras, computadores desktops, decodificadores, televisões, dispositivo de monitores, reprodutores de mídia digital, consoles de videogame, dispositivos de fluxo de vídeo (tal como servidores de serviços de conteúdo ou servidores de fornecimento de conteúdo), dispositivo receptor de transmissão, dispositivo transmissor de transmissão, ou similares e podem utilizar nenhum ou qualquer tipo de sistema de operação. Em alguns casos, o dispositivo de fonte 12 e o dispositivo de destino 14 podem ser equipados para comunicação sem fio. Assim, o dispositivo de fonte 12 e o dispositivo de destino 14 podem ser dispositivos de comunicação sem fio.
[0078] Em alguns casos, o sistema de codificação de vídeo 10 ilustrado na Figura 1A é meramente um exemplo e as técnicas do presente pedido podem ser aplicadas às configurações de codificação de vídeo (por exemplo, codificação de vídeo ou decodificação de vídeo) que não necessariamente incluem qualquer comunicação de dados entre os dispositivos de codificação e decodificação. Em outros exemplos, os dados são recuperados de uma memória local, transmitidos sobre uma rede, ou similares. Um dispositivo de codificação de vídeo pode codificar e armazenar dados na memória, e/ou um dispositivo de decodificação de vídeo pode recuperar e decodificar dados da memória. Em alguns exemplos, a codificação e decodificação é executada por dispositivos que não comunicam um com o outro, mas simplesmente codificam dados para a memória e/ou recuperam e decodificam dados da memória.
[0079] Para conveniência de descrição, as modalidades da invenção estão aqui descritas, por exemplo, por referência à Codificação de vídeo de alta eficiência (HEVC) ou ao software de referência de Codificação de Vídeo Versátil (VVC), o padrão de codificação de vídeo de próximo geração desenvolvido pelo Joint Collaboration Team on Video Coding (JCT-VC) de ITU-T Video Coding Experts Group (VCEG) e ISO/IEC Motion Imagem Experts Group (MPEG). Alguém versado na técnica compreenderá que as modalidades da invenção não estão limitadas a HEVC ou VVC. Método de Codificador e Codificação
[0080] A Figura 2 mostra um diagrama de blocos esquemático de um codificador de vídeo exemplar 20 que está configurado para implementar as técnicas do presente pedido. No exemplo da Figura 2, o codificador de vídeo 20 compreende uma entrada 201 (ou interface de entrada 201), uma unidade de cálculo residual 204, uma unidade de processamento de transformada 206, uma unidade de quantização 208, uma unidade de quantização inversa 210, e uma unidade de processamento de transformada inversa 212, uma unidade de reconstrução 214, uma unidade de filtro de loop 220, uma armazenamento temporário de imagem decodificada (DPB) 230, uma unidade de seleção de modo 260, uma unidade de codificação de entropia 270 e uma saída 272 (ou interface de saída 272). A unidade de seleção de modo 260 pode include uma unidade de interpredição 244, uma unidade de intrapredição 254 e uma unidade de particionamento
262. A unidade de interpredição 244 pode incluir uma unidade de estimativa de movimento e uma unidade de compensação de movimento (não mostradas). Um codificador de vídeo 20 como mostrado na Figura 2 pode também ser referido como codificador de vídeo híbrido ou um codificador de vídeo de acordo com a codec de vídeo híbrido.
[0081] A unidade de cálculo residual 204, a unidade de processamento de transformada 206, a unidade de quantização 208, a unidade de seleção de modo 260 podem ser referidas como formando um percurso de sinal para frente do codificador 20, enquanto que unidade de quantização inversa 210, a unidade de processamento de transformada inversa 212, a unidade de reconstrução 214, o armazenamento temporário 216, o filtro de loop 220, o armazenamento temporário de imagem decodificada (DPB) 230, a unidade de interpredição 244 e a unidade de intrapredição 254 podem ser referidas como formando um percurso de sinal de retorno do codificador de vídeo 20, em que o percurso de sinal de retorno do codificador de vídeo 20 corresponde ao percurso de sinal do decodificador (ver decodificador de vídeo 30 na Figura 3). A unidade de quantização inversa 210, a unidade de processamento de transformada inversa 212, a unidade de reconstrução 214, o filtro de loop 220, o armazenamento temporário de imagem decodificada (DPB) 230, a unidade de interpredição 244 e a unidade de intrapredição 254 são também referidas como formando o "decodificador embutido" do codificador de vídeo 20. Imagens & Particionamento de Imagem (Imagens & Blocos)
[0082] O codificador 20 pode estar configurado para receber, por exemplo, através da entrada 201, uma imagem 17 (ou dados de imagem
17), por exemplo, imagem de uma sequência de imagens que forma um vídeo ou sequência de vídeo. A imagem ou dados de imagem recebidos pode também ser uma imagem pré-processada 19 (ou dados de imagem pré-processados 19). Para o bem da simplicidade, a descrição seguinte refere-se à imagem 17. A imagem 17 pode também ser referida como uma imagem corrente ou uma imagem a ser codificada (especificamente na codificação de vídeo para distinguir a imagem corrente de outras imagens, por exemplo, imagens previamente codificadas e/ou decodificadas da mesma sequência de vídeo, isto é, a sequência de vídeo a qual também compreende a imagem corrente).
[0083] Uma imagem (digital) é ou pode ser considerada como uma rede ou matriz bidimensional de amostras com valores de intensidade. Uma amostra na rede pode também ser referida como pixel (forma abreviada de elemento de imagem) ou um pel. O número de amostras na direção (ou eixo geométrico) horizontal e vertical da rede ou imagem define o tamanho e/ou resolução da imagem. Para representação de cor, tipicamente três componentes da cor são usados, isto é, a imagem pode ser representada ou incluir três redes de amostras. No formato RBG ou espaço de cor uma imagem compreende uma rede de amostras vermelha, verde e azul correspondente. No entanto, em codificação de vídeo cada pixel é tipicamente representado em um formato de luminância e crominância ou espaço de cor, por exemplo, YCbCr, o que compreende um componente de luminância indicado por Y (algumas vezes também L é utilizado ao invés) e dois componentes de crominância indicados por Cb e Cr. O componente de luminância (ou abreviado luma) Y representa a luminosidade ou intensidade do nível de cinza (por exemplo, como em uma imagem de escalagem de cinza), enquanto que os dois componentes de crominância (ou abreviado croma) Cb e Cr representam os componentes de cromaticidade ou informações de cor. Consequentemente, uma imagem em formato
YCbCr compreende uma rede de amostras de luminância de valores de amostra de luminância (Y), e duas redes de amostras de crominância de valores de crominância (Cb e Cr). As imagens no formato RGB podem ser convertidas ou transformadas no formato YCbCr e vice- versa, o processo é também conhecido como transformação ou conversão de cores. Se uma imagem for monocromática, a imagem pode compreender somente uma rede de amostras de luminância. Consequentemente, a imagem pode ser, por exemplo, uma rede de amostras de luma em formato monocromático ou uma rede de amostras de luma e duas redes correspondentes de amostras de croma em formato de cor 4:2:0, 4:2:2, e 4:4:4.
[0084] As modalidades do codificador de vídeo 20 podem compreender uma unidade de particionamento de imagem (não apresentada na Figura 2) configurada para particionar a imagem 17 em uma pluralidade de blocos de imagem 203 (tipicamente não sobrepostos). Estes blocos podem também ser referidos como blocos de raiz, macroblocos (H.264/AVC) ou blocos de árvore de codificação (CTB) ou unidades de árvore de codificação (CTU) (H.265/HEVC e VVC). A unidade de particionamento de imagem pode estar configurada para utilizar o mesmo tamanho de bloco para todas as imagens de uma sequência de vídeo e a grade correspondente que define o tamanho do bloco, ou mudar o tamanho do bloco entre imagens ou subconjuntos ou grupos de imagens, e particionar cada imagem nos blocos correspondentes.
[0085] Em modalidades adicionais, o codificador de vídeo pode estar configurado para receber diretamente um bloco 203 da imagem 17, por exemplo, um, diversos ou todos os blocos que formam a imagem
17. O bloco de imagem 203 pode também ser referido como bloco de imagem corrente ou bloco de imagem a ser codificado.
[0086] Como a imagem 17, o bloco de imagem 203 novamente é ou pode ser considerado como uma rede ou matriz bidimensional de amostras com valores de intensidade (valores de amostra), apesar de dimensão menor do que a imagem 17. Em outras palavras, o bloco 203 pode compreender, por exemplo, uma rede de amostras (por exemplo, uma rede de luma no caso de uma imagem monocromática 17, ou uma rede de luma ou croma no caso de uma imagem colorida) ou três redes de amostras (por exemplo, uma rede de luma e duas de croma no caso de uma imagem colorida 17) ou qualquer outro número e/ou tipo de redes dependendo do formato de cor aplicado. O número de amostras na direção (ou eixo geométrico) horizontal e vertical do bloco 203 define o tamanho do bloco 203. Consequentemente, um bloco pode ser, por exemplo, uma rede de amostras MxN (M colunas por N linhas), ou uma rede MxN de coeficientes de transformada.
[0087] As modalidades do codificador de vídeo 20 como mostrado na Figura 2 podem ser configuradas para codificar a imagem 17 bloco por bloco, por exemplo, a codificação e predição é executada por bloco
203.
[0088] As modalidades do codificador de vídeo 20 como mostradas nas Figura 2 podem ser ainda configuradas para particionar e/ou codificar a imagem utilizando fatias (também referidas como fatias de vídeo), em que uma imagem pode ser particionada ou codificada utilizando uma ou mais fatias (tipicamente não sobrepostas), e cada fatia pode compreender um ou mais blocos (por exemplo, CTUs).
[0089] As modalidades do codificador de vídeo 20 como mostradas na Figura 2 podem ser ainda configuradas para particionar e/ou codificar a imagem utilizando grupos de telas lado a lado (também referidos como grupos de telas lado a lado de vídeo) e/ou telas lado a lado (também referidas telas lado a lado de vídeo), em que uma imagem pode ser particionada ou codificada utilizando um ou mais grupos de telas lado a lado (tipicamente não sobrepostas), e cada grupo de telas lado a lado pode compreender, por exemplo, um ou mais blocos (por exemplo, CTUs) ou uma ou mais telas lado a lado, em que cada tela lado a lado, por exemplo, pode ser de forma retangular e pode compreender um ou mais blocos (por exemplo, CTUs), por exemplo, blocos completos ou fracionários. Cálculo Residual
[0090] A unidade de cálculo residual 204 pode estar configurada para calcular um bloco residual 205 (também referido como resíduo 205) com base no bloco imagem 203 e o bloco de predição 265 (detalhes adicionais sobre o bloco de predição 265 estão posteriormente providos), por exemplo, subtraindo valores de amostra do bloco de predição 265 de valores de amostra do bloco de imagem 203, amostra por amostra (pixel por pixel) para obter o bloco residual 205 no domínio de amostra. Transformada
[0091] A unidade de processamento de transformada 206 pode estar configurada para aplicar uma transformada, por exemplo, uma transformada de cosseno discreta (DCT) ou transformada de seno discreta (DST), sobre os valores de amostra do bloco residual 205 para obter coeficientes de transformada 207 em um domínio de transformada. Os coeficientes de transformada 207 podem também ser referidos como coeficientes residuais de transformada e representam o bloco residual 205 no domínio de transformada.
[0092] A unidade de processamento de transformada 206 pode estar configurada para aplicar aproximações inteiras DCT/DST, tal como as transformadas especificadas para H.265/HEVC. Comparadas com uma transformada DCT ortogonal, tais aproximações inteiras são tipicamente escaladas por um certo fator. De modo a preservar a norma do bloco residual o qual é processado por transformadas diretas e inversas, fatores de escalagem adicionais são aplicados como parte do processo de transformada. Os fatores de escalagem são tipicamente escolhidos com base em certas restrições como os fatores de escalagem sendo uma potência de dois para operações de deslocamento, profundidade de bits dos coeficientes de transformada, compensação entre precisão e custos de implementação, etc. Os fatores de escalagem específicos são, por exemplo, especificados para a transformada inversa, por exemplo, pela unidade de processamento de transformada inversa 212 (e a transformada inversa correspondente, por exemplo, pela unidade de processamento de transformada inversa 312 no decodificador de vídeo 30) e fatores de escalagem correspondentes para a transformada direta, por exemplo, pela unidade de processamento de transformada 206, em um codificador 20 pode ser especificada consequentemente.
[0093] As modalidades do codificador de vídeo 20 (respectivamente unidade de processamento de transformada 206) podem estar configuradas para emitir parâmetros de transformada, por exemplo, um tipo de transformada ou transformadas, por exemplo, diretamente ou codificadas ou comprimidas através da unidade de codificação de entropia 270, de modo que, por exemplo, o decodificador de vídeo 30 possa receber e utilizar os parâmetros de transformada para decodificação. Quantização
[0094] A unidade de quantização 208 pode estar configurada para quantizar os coeficientes de transformada 207 para obter coeficientes quantizados 209, por exemplo, aplicando quantização escalar ou quantização de vetor. Os coeficientes quantizados 209 podem também ser referidos como coeficientes de transformada quantizados 209 ou coeficientes residuais quantizados 209.
[0095] O processo de quantização pode reduzir a profundidade de bits associada com alguns ou todos coeficientes de transformada 207.
Por exemplo, um coeficiente de transformada de n bits pode ser arredondado para baixo para um coeficiente de transformada de m bits durante a quantização, onde n é maior do que m.
O grau de quantização pode ser modificado ajustando um parâmetro de quantização (QP). Por exemplo, para quantização escalar, diferentes escalagens podem ser aplicadas para conseguir uma quantização mais fina ou mais grosseira.
Tamanhos de etapa de quantização menores correspondem à quantização mais fina, enquanto que tamanhos de etapas de quantização maiores correspondem à quantização mais grosseira.
O tamanho de etapa de quantização aplicável pode ser indicado por um parâmetro de quantização (QP). O parâmetro de quantização pode, por exemplo, ser um índice para um conjunto predefinido de tamanhos de etapas de quantização aplicáveis.
Por exemplo, pequenos parâmetros de quantização podem corresponder à quantização fina (pequenos tamanhos de etapas de quantização) e grandes parâmetros de quantização podem corresponder à quantização grosseira (grandes etapas de quantização) ou vice-versa.
A quantificação pode incluir a divisão por um tamanho de etapa de quantização e uma correspondente e/ou desquantização inversa, por exemplo, pela unidade de quantização inversa 210, pode incluir a multiplicação pelo tamanho de etapa de quantização.
As modalidades de acordo com alguns padrões, por exemplo, HEVC, podem ser configuradas para utilizar um parâmetro de quantização para determinar o tamanho de etapa de quantização.
Geralmente, o tamanho de etapa de quantização pode ser calculado com base em um parâmetro de quantização utilizando uma aproximação de ponto fixo de uma equação incluindo divisão.
Fatores de escalagem adicionais podem ser introduzidos para quantização e desquantização para restaurar a norma do bloco residual, que pode ser modificado por causa da escala utilizada na aproximação de ponto fixo da equação para tamanho de etapa de quantização e parâmetro de quantização. Em uma implementação exemplar, a escalagem da transformação inversa e desquantização poderia ser combinada. Alternativamente, tabelas de quantização customizadas podem ser utilizadas e sinalizadas de um codificador para um decodificador, por exemplo, em um fluxo de bits. A quantização é uma operação com perdas, em que a perda aumenta com os tamanhos de etapas de quantização crescentes.
[0096] As modalidades do codificador de vídeo 20 (respectivamente a unidade de quantização 208) podem ser configuradas para emitir parâmetros de quantização (QP), por exemplo, diretamente ou codificados através da unidade de codificação de entropia 270, de modo que, por exemplo, o decodificador de vídeo 30 possa receber e aplicar os parâmetros de quantização para decodificação. Quantização Inversa
[0097] A unidade de quantização inversa 210 está configurada para aplicar a quantização inversa da unidade de quantização 208 nos coeficientes quantizados para obter coeficientes desquantizados 211, por exemplo, aplicando o inverso do esquema de quantização aplicado pela unidade de quantização 208 com base em ou utilizando o mesmo tamanho de etapa de quantização que a unidade de quantização 208. Os coeficientes desquantizados 211 podem também ser referidos como coeficientes residuais desquantizados 211 e correspondem - apesar de tipicamente não idênticos aos coeficientes de transformada devido à perda por quantização - aos coeficientes de transformada 207. Transformada Inversa
[0098] A unidade de processamento de transformada inversa 212 está configurada para aplicar a transformada inversa da transformada aplicada pela unidade de processamento de transformada 206, por exemplo, uma transformada de cosseno discreta inversa (DCT) ou transformada de seno discreta inversa (DST) ou outras transformadas inversa, para obter um bloco residual reconstruído 213 (ou coeficientes desquantizados correspondentes 213) no domínio da amostra. O bloco residual reconstruído 213 pode também ser referido como bloco de transformada 213. Reconstrução
[0099] A unidade de reconstrução 214 (por exemplo, adicionador ou somador 214) está configurada para adicionar o bloco de transformada 213 (isto é, o bloco residual reconstruído 213) ao bloco de predição 265 para obter um bloco reconstruído 215 no domínio da amostra, por exemplo, adicionando - amostra por amostra - os valores de amostra do bloco residual reconstruído 213 e os valores de amostra do bloco de predição 265. Filtragem
[00100] A unidade de filtro de loop 220 (ou abreviado "filtro de loop" 220), está configurada para filtrar o bloco reconstruído 215 para obter um bloco filtrado 221, ou em geral, para filtrar amostras reconstruídas para obter amostras filtradas. A unidade de filtro de loop está, por exemplo, configurada para suavizar transições de pixel, ou de outro modo aperfeiçoar a qualidade do vídeo. A unidade de filtro de loop 220 pode compreender um ou mais filtros de loop tal como um filtro de desbloqueio, um filtro de deslocamento adaptável de amostra (SAO) ou um ou mais outros filtros, por exemplo, um filtro bilateral, um filtro de loop adaptável (ALF), filtros de aguçamento, suavização ou filtros colaborativos, ou qualquer sua combinação. Apesar da unidade de filtro de loop 220 ser mostrada na Figura 2 como sendo um filtro de loop interno, em outras configurações, a unidade de filtro de loop 220 pode ser implementada como um filtro de loop posterior. O bloco filtrado 221 pode também ser referido como bloco reconstruído filtrado 221.
[00101] As modalidades do codificador de vídeo 20 (respectivamente unidade de filtro de loop 220) podem ser configuradas para emitir parâmetros de filtro de loop (tal como informações de deslocamento adaptável de amostra), por exemplo, diretamente ou codificados através da unidade de seleção de entropia 270, de modo que, por exemplo, um decodificador 30 possa receber e aplicar os mesmos parâmetros de filtro de loop ou respectivos filtros de loop para decodificação. Armazenamento Temporário de Imagem Decodificada
[00102] O armazenamento temporário de imagem decodificada (DPB) 230 pode ser uma memória que armazena imagens de referência, ou em geral dados de imagem de referência, para codificar dados de vídeo pelo codificador de vídeo 20. O DPB 230 pode ser formado por qualquer um de uma variedade de dispositivos de memória, tal como memória de acesso randômico dinâmica (DRAM), incluindo DRAM síncrona (SDRAM), RAM magnetorresistiva (MRAM), RAM resistiva (RRAM), ou outros tipos de dispositivos de memória. O armazenamento temporário de imagem decodificada (DPB) 230 pode estar configurado para armazenar um ou mais blocos filtrados 221. O armazenamento temporário de imagem decodificada 230 pode estar ainda configurado para armazenar outros blocos previamente filtrados, por exemplo, blocos previamente reconstruídos e filtrados 221, da mesma imagem corrente ou de diferentes imagens, por exemplo, imagens previamente reconstruídas, e pode prover imagens completas previamente reconstruídas, isto é, imagens decodificadas (e blocos e amostras de referência correspondentes) e/ou uma imagem corrente parcialmente reconstruída (e blocos e amostras de referência correspondentes), por exemplo, para interpredição. O armazenamento temporário de imagem decodificada (DPB) 230 pode estar também configurado para armazenar um ou mais blocos reconstruídos não filtrados 215, ou em geral amostras reconstruídas não filtradas, por exemplo, se o bloco reconstruído 215 não for filtrado pela unidade de filtro de loop 220, ou qualquer outra versão processada adicional dos blocos ou amostras reconstruídos. Seleção de Modo (Particionamento & Predição)
[00103] A unidade de seleção de modo 260 compreende a unidade de particionamento 262, unidade de interpredição 244 e unidade de intrapredição 254, e está configurada para receber ou obter dados de imagem originais, por exemplo, um bloco original 203 (bloco corrente 203 da imagem corrente 17), e dados de imagem reconstruídos, por exemplo, amostras ou blocos reconstruídas filtrados e/ou não filtrados da mesma (corrente) imagem e/ou de uma ou uma pluralidade de imagens previamente decodificadas, por exemplo, do armazenamento temporário de imagem decodificada 230 ou outros armazenamentos temporários (por exemplo, armazenamento temporário de linha, não mostrado). Os dados de imagem reconstruídos são utilizados como dados de imagem de referência para predição, por exemplo, interpredição ou intrapredição, para obter um bloco de predição 265 ou preditor 265.
[00104] A unidade de seleção de modo 260 pode estar configurada para determinar ou selecionar um particionamento para um modo de predição de bloco corrente (incluindo não particionamento) e um modo de predição (por exemplo, um modo de intra ou interpredição) e gerar um bloco de predição correspondente 265, o qual é utilizado para o cálculo do bloco residual 205 e para a reconstrução do bloco reconstruído 215.
[00105] As modalidades da unidade de seleção de modo 260 podem estar configuradas para selecionar o particionamento e o modo de predição (por exemplo, daqueles suportados por ou disponíveis para a unidade de seleção de modo 260), o qual provê a melhor coincidência ou em outras palavras o resíduo mínimo (o resíduo mínimo significa melhor compressão para transmissão ou armazenamento), ou um excesso de sinalização mínimo (excesso de sinalização mínimo significa melhor compressão para transmissão ou armazenamento), ou o que considere ou equilibra ambos. A unidade de seleção de modo 260 pode estar configurada para determinar o particionamento e o modo de predição com base em otimização de distorção de taxa (RDO), isto é, selecionar o modo de predição o qual provê uma distorção de taxa mínima. Termos como "melhor", "mínimo", "ótimo" etc., neste contexto, não necessariamente referem-se a um "melhor", "mínimo", "ótimo", etc. total, mas podem também referir ao cumprimento de um critério de terminação ou seleção como um valor que excede ou cai abaixo de um limite ou outras restrições que levam potencialmente a uma "seleção subótima", mas reduzindo a complexidade e o tempo de processamento.
[00106] Em outras palavras, a unidade de particionamento 262 pode estar configurada para particionar o bloco 203 em menores partições de bloco ou sub-blocos (os quais formam novamente blocos), por exemplo, iterativamente utilizando particionamento de quadtree (QT), particionamento binário (BT) ou particionamento de árvore tripla (TT) ou qualquer sua combinação, e para executar, por exemplo, a predição para cada uma das partições de bloco ou sub-blocos, em que a seleção de modo compreende a seleção da estrutura de árvore do bloco particionado 203 e os modos de predição são aplicados a cada uma das partições de bloco ou sub-blocos.
[00107] A seguir, o particionamento (por exemplo, pela unidade de particionamento 260) e processamento de predição (pela unidade de interpredição 244 e unidade intrapredição 254) executados por um codificador de vídeo exemplar 20 serão explicados em mais detalhes. Particionamento
[00108] A unidade de particionamento 262 pode particionar (ou dividir) um bloco corrente 203 em menores partições, por exemplo, menores blocos de tamanho quadrado ou retangular. Estes menores blocos (os quais podem também ser referidos como sub-blocos) podem ser ainda particionados em partições ainda menores. Isto também é referido a particionamento de árvore ou particionamento de árvore hierárquica, em que um bloco de raiz, por exemplo, no nível de árvore de raiz 0 (nível de hierarquia 0, profundidade 0), pode ser recursivamente particionado, por exemplo, particionado em dois ou mais blocos de um próximo nível de árvore inferior, por exemplo, nodos no nível de árvore 1 (nível de hierarquia 1, profundidade 1), em que estes blocos podem ser novamente particionados em dois ou mais blocos de um próximo nível inferior, por exemplo, nível de árvore 2 (nível de hierarquia 2, profundidade 2), etc. até que o particionamento seja terminado, por exemplo, porque um critério de terminação é atendido, por exemplo, uma profundidade de árvore máxima ou tamanho de bloco mínimo é atingido. Os blocos os quais não são adicionalmente particionados são também referidos como blocos de folha ou nodos de folha da árvore. Uma árvore que utiliza particionamento em duas partições é referida como árvore binária (BT), uma árvore que utiliza particionamento em três partições é referida como árvore ternária (TT), e uma árvore que utiliza particionamento em quatro partições é referida como quadtree (QT).
[00109] Como anteriormente mencionado, o termo "bloco" como aqui utilizado pode ser uma porção, especificamente uma porção quadrada ou retangular, de uma imagem. Com referência, por exemplo, a HEVC e VVC, o bloco pode ser ou corresponder a uma unidade de árvore de codificação (CTU), uma unidade de codificação (CU), unidade de predição (PU), e unidade de transformada (TU) e/ou para os blocos correspondentes, por exemplo, um bloco de árvore de codificação (CTB), um bloco de codificação (CB), um bloco de transformada (TB) ou bloco de predição (PB).
[00110] Por exemplo, uma unidade de árvore de codificação (CTU)
pode ser ou compreender um CTB de amostras de luma, dois CTBs correspondentes de amostras de croma de uma imagem que tem três redes de amostra, ou um CTB de amostras de uma imagem monocromática ou uma imagem que é codificada utilizando três planos de cores separados e estruturas de sintaxe utilizadas para codificar as amostras. Correspondentemente, um bloco de árvore de codificação (CTB) pode ser um bloco NxN de amostras para algum valor de N de modo que a divisão de um componente em CTBs seja um particionamento. Uma unidade de codificação (CU) pode ser ou compreender um bloco de codificação de amostras de luma, dois blocos de codificação correspondentes de amostras de croma de uma imagem que tem três redes de amostras, ou um bloco de codificação de amostras de uma imagem monocromática ou uma imagem que é codificada utilizando três planos de cores separados e estruturas de sintaxe utilizadas para codificar as amostras. Correspondentemente, um bloco de codificação (CB) pode ser um bloco MxN de amostras para alguns valores de M e N de modo que a divisão de um CTB em blocos de codificação seja um particionamento.
[00111] Em modalidades, por exemplo, de acordo com HEVC, uma unidade de árvore de codificação (CTU) pode ser dividida em CUs utilizando uma estrutura de quadtree denotada como árvore de codificação. A decisão se codificar uma área de imagem utilizando interimagem (temporal) ou intraimagem (espacial) é feita no nível de CU. Cada CU pode ser ainda dividida em uma, duas ou quatro PUs de acordo com o tipo de divisão de PU. Dentro de uma PU, o mesmo processo de predição é aplicado e as informações relevantes são transmitidas para o decodificador em uma base da PU. Após obter o bloco residual aplicando o processo de predição com base no tipo de divisão de PU, uma CU pode ser particionada em unidades de transformada (TUs) de acordo com outra estrutura quadtree similar à árvore de codificação para a CU.
[00112] Em modalidades, por exemplo, de acordo com o padrão de codificação de vídeo mais recente correntemente em desenvolvimento, o qual é referido como Codificação de Vídeo Versátil (VVC), um particionamento de quadtree e árvore binária combinadas (QTBT) é, por exemplo, utilizado para particionar um bloco de codificação. Na estrutura de bloco QTBT, uma CU pode ter uma forma ou quadrada ou retangular. Por exemplo, uma unidade de árvore de codificação (CTU) é primeiro particionada por uma estrutura de quadtree. Os nodos de folha quadtree são ainda particionados por uma estrutura de árvore binária ou árvore ternária (ou tripla). Os nodos de folha de árvore de particionamento são denominados unidades de codificação (CUs), e esta segmentação é utilizada para predição e processamento de transformada sem qualquer particionamento adicional. Isto significa que CU, PU e TU têm o mesmo tamanho de bloco na estrutura de bloco de codificação QTBT. Em paralelo, partição múltipla, por exemplo, partição de árvore tripla pode ser utilizada juntamente com a estrutura de bloco QTBT.
[00113] Em um exemplo, a unidade de seleção de modo 260 do codificador de vídeo 20 pode estar configurada para executar qualquer combinação das técnicas de particionamento aqui descritas.
[00114] Como acima descrito, o codificador de vídeo 20 está configurado para determinar ou selecionar o melhor ou um ótimo modo de um conjunto de modos de predição (por exemplo, predeterminados). O conjunto de modos de predição pode compreender, por exemplo, modos intrapredição e/ou modos interpredição. Intrapredição
[00115] O conjunto de modos de intrapredição pode compreender 35 diferentes modos de intrapredição, por exemplo, modos não direcionais como modo DC (ou médio) e modo planar, ou modos direcionais, por exemplo, como definido em HEVC, ou pode compreender 67 diferentes modos de intrapredição, por exemplo, modos não direcionais como modo DC (ou médio) e modo planar, ou modos direcionais, por exemplo, como definido para VVC.
[00116] A unidade de intrapredição 254 está configurada para utilizar amostras reconstruídas de blocos vizinhos da mesma imagem corrente para gerar um bloco de intrapredição 265 de acordo com um modo de intrapredição do conjunto de modos de intrapredição.
[00117] A unidade de intrapredição 254 (ou em geral a unidade de seleção de modo 260) está ainda configurada para emitir parâmetros de intrapredição (ou em geral informações indicativas do modo de intrapredição selecionado para o bloco) para a unidade de codificação de entropia 270 na forma de elementos de sintaxe 266 para inclusão nos dados de imagem codificados 21, de modo que, por exemplo, o decodificador de vídeo 30 possa receber e utilizar os parâmetros de predição para decodificação. Interpredição
[00118] O conjunto de (ou possíveis) modos de interpredição depende das imagens de referência disponíveis (isto é, imagens anteriores pelo menos parcialmente decodificadas, por exemplo, armazenadas no DBP 230) e outros parâmetros de interpredição, por exemplo, se toda a imagem de referência ou somente uma parte, por exemplo, uma área de janela de pesquisa ao redor da área do bloco corrente, da imagem de referência é utilizada para pesquisar por um bloco de referência de melhor coincidência, e/ou, por exemplo, se interpolação de pixels é aplicada, por exemplo, interpolação de meio/semi-pel e/ou quarto de pel, ou não.
[00119] Além dos modos de predição acima, o modo de salto e/ou modo direto pode ser aplicado.
[00120] A unidade de interpredição 244 pode incluir uma unidade de estimativa de movimento (ME) e uma unidade de compensação de movimento (MC) (ambas não mostradas na Figura 2). A unidade de estimativa de movimento pode estar configurada para receber ou obter o bloco de imagem 203 (bloco de imagem corrente 203 da imagem corrente 17) e uma imagem decodificada 231, ou pelo menos um de uma pluralidade de blocos previamente reconstruídos, por exemplo, blocos reconstruídos de uma ou uma pluralidade de outras/diferentes imagens previamente decodificadas 231, para estimativa de movimento. Por exemplo, uma sequência de vídeo pode compreender a imagem corrente e as imagens previamente decodificadas 231, ou em outras palavras, a imagem corrente e as imagens previamente decodificadas 231 podem fazer parte de ou formar uma sequência de imagens que forma uma sequência de vídeo.
[00121] O codificador 20 pode, por exemplo, estar configurado para selecionar um bloco de referência de uma pluralidade de blocos de referência das mesmas ou diferentes imagens da pluralidade de outras imagens e prover uma imagem de referência (ou índice de imagem de referência) e/ou um deslocamento (deslocamento espacial) entre a posição (coordenadas x, y) do bloco de referência e a posição do bloco corrente como parâmetros de interpredição para a unidade de estimativa de movimento. Este deslocamento é também denominado de vetor de movimento (MV).
[00122] A unidade de compensação de movimento está configurada para obter, por exemplo, receber, um parâmetro de interpredição e executar interpredição com base em ou utilizando o parâmetro interpredição para obter um bloco de interpredição 265. A compensação de movimento, executada pela unidade de compensação de movimento, pode envolver buscar ou gerar o bloco de predição com base no movimento/vetor de bloco determinado pela estimativa de movimento, possivelmente executando interpolações para precisão de subpixel. A filtragem de interpolação pode gerar amostras de pixels adicionais de amostras de pixels conhecidas, assim potencialmente aumentando o número de blocos de predição candidatos que podem ser utilizados para codificar um bloco de imagem. Quando recebendo o vetor de movimento para a PU do bloco de imagem corrente, a unidade de compensação de movimento pode localizar o bloco de predição para o qual o vetor de movimento aponta em uma das listas de imagens de referência.
[00123] A unidade de compensação de movimento pode também gerar elementos de sintaxe associados com os blocos e fatias de vídeo para utilização pelo decodificador de vídeo 30 na decodificação dos blocos de imagem da fatia de vídeo. Além disso ou como uma alternativa a fatias e respectivos elementos de sintaxe, grupos de telas lado a lado e/ou telas lado a lado e respectivos elementos de sintaxe podem ser gerados ou utilizados. Codificação de Entropia
[00124] A unidade de codificação de entropia 270 está configurada para aplicar, por exemplo, um algoritmo ou esquema de codificação de entropia (por exemplo, um esquema de codificação de comprimento variável (VLC), um esquema de VLC adaptável a contexto (CAVLC), um esquema de codificação aritmética, uma binarização, uma codificação aritmética binária adaptável a contexto (CABAC), codificação aritmética binária adaptável a contexto baseada em sintaxe (SBAC), codificação de entropia de particionamento de intervalo de probabilidade (PIPE) ou outra metodologia ou técnica de codificação de entropia) ou desviar (sem compressão) os coeficientes quantizados 209, parâmetros de interpredição, parâmetros de intrapredição, parâmetros de filtro de loop e/ou outros elementos de sintaxe para obter dados de imagem codificados 21 os quais podem ser emitidos através da saída 272, por exemplo, na forma de um fluxo de bits codificado 21, de modo que, por exemplo, o decodificador de vídeo 30 possa receber e utilizar os parâmetros para decodificação. O fluxo de bits codificado 21 pode ser transmitido para o decodificador de vídeo 30, ou armazenado em uma memória para transmissão ou recuperação posterior pelo decodificador de vídeo 30.
[00125] Outras variações estruturais do codificador de vídeo 20 podem ser utilizadas para codificar o fluxo de vídeo. Por exemplo, um codificador baseado em não transformada 20 pode quantizar o sinal residual diretamente sem a unidade de processamento de transformada 206 para certos blocos ou quadros. Em outra implementação, um codificador 20 pode ter a unidade de quantização 208 e a unidade de quantização inversa 210 combinados em uma única unidade. Decodificador e Método Decodificação
[00126] A Figura 3 mostra um exemplo de um decodificador de vídeo 30 que está configurado para implementar as técnicas do presente pedido. O decodificador de vídeo 30 está configurado para receber dados de imagem codificados 21 (por exemplo, fluxo de bits codificado 21), por exemplo, codificados pelo codificador 20, para obter uma imagem decodificada 331. Os dados de imagem ou fluxo de bits codificados compreendem informações para decodificar os dados de imagem codificados, por exemplo, dados que representam blocos de imagem de uma fatia de vídeo codificada (e/ou grupos de telas lado a lado ou telas lado a lado) e elementos de sintaxe associados.
[00127] No exemplo da Figura 3, o decodificador 30 compreende uma unidade de decodificação de entropia 304, uma unidade de quantização inversa 310, uma unidade de processamento de transformada inversa 312, uma unidade de reconstrução 314 (por exemplo, um somador 314), um filtro de loop 320, um armazenamento temporário de imagem decodificada (DBP) 330, uma unidade de aplicação de modo 360, uma unidade de interpredição 344 e uma unidade de intrapredição 354. A unidade de interpredição 344 pode ser ou incluir uma unidade de compensação de movimento. O decodificador de vídeo 30 pode, em alguns exemplos, executar uma passagem de decodificação geralmente recíproca à passagem de codificação descrita com relação ao codificador de vídeo 100 da Figura 2.
[00128] Como explicado com relação ao codificador 20, a unidade de quantização inversa 210, a unidade de processamento de transformada inversa 212, a unidade de reconstrução 214 o filtro de loop 220, o armazenamento temporário de imagem decodificada (DPB) 230, a unidade de interpredição 344 e a unidade de intrapredição 354 são também referidas como formando o "decodificador embutido" do codificador de vídeo 20. Consequentemente, a unidade de quantização inversa 310 pode ser idêntica em função à unidade de quantização inversa 110, a unidade de processamento de transformada inversa 312 pode ser idêntico em função a unidade de processamento de transformada inversa 212, a unidade de reconstrução 314 pode ser idêntica em função à unidade de reconstrução 214, o filtro de loop 320 pode ser idêntico em função ao filtro de loop 220, e o armazenamento temporário de imagem decodificada 330 pode ser idêntico em função ao armazenamento temporário de imagem decodificada 230. Portanto, as explicações providas para as respetivas unidades e funções do codificador de vídeo 20 se aplicam correspondentemente às respetivas unidades e funções do decodificador de vídeo 30. Decodificação de Entropia
[00129] A unidade de decodificação de entropia 304 está configurada para analisar o fluxo de bits 21 (ou em geral dados de imagem codificados 21) e executar, por exemplo, decodificação de entropia nos dados de imagem codificados 21 para obter, por exemplo, coeficientes quantizados 309 e/ou parâmetros de codificação decodificados (não mostrados na Figura 3), por exemplo, quaisquer ou todos os parâmetros de interpredição (por exemplo, índice de imagem de referência e vetor de movimento), parâmetro de intrapredição (por exemplo, modo ou índice de intrapredição), parâmetros transformada, parâmetros de quantização, parâmetros de filtro de loop, e/ou outros elementos de sintaxe. A unidade de decodificação de entropia 304 pode estar configurada para aplicar os algoritmos ou esquemas de decodificação que correspondem aos esquemas de codificação como descrito com relação à unidade de ligação de entropia 270 do codificador 20. A unidade de decodificação de entropia 304 pode estar ainda configurada para prover parâmetros de interpredição de provador, parâmetros de intrapredição e/ou outros elementos de sintaxe para a unidade de aplicação de modo 360 e outros parâmetros para outras unidades do decodificador 30. O decodificador de vídeo 30 pode receber elementos de sintaxe no nível de fatia de vídeo e/ou no nível de bloco de vídeo. Além disso ou como uma alternativa a fatias e respectivos elementos de sintaxe, grupos de telas lado a lado e/ou telas lado a lado e respectivos elementos de sintaxe podem ser recebidos e/ou utilizados. Quantização Inversa
[00130] A unidade de quantização inversa 310 pode estar configurada para receber parâmetros de quantização (QP) (ou em geral informações relativas à quantização inversa) e coeficientes quantizados dos dados de imagem codificados 21 (por exemplo, por analisando e/ou decodificando, por exemplo, pela unidade de decodificação de entropia 304) e aplicar com base nos parâmetros de quantização uma quantização inversa nos coeficientes quantizados decodificados 309 para obter coeficientes desquantizados 311, os quais podem também ser referidos como coeficientes de transformada 311. O processo de quantização inversa pode incluir a utilização de um parâmetro de quantização determinado pelo codificador de vídeo 20 para cada bloco de vídeo na fatia de vídeo (ou telas lado a lado ou grupo de telas lado a lado) para determinar um grau de quantização e, do mesmo modo, um grau de quantização inversa que deve ser aplicado. Transformada Inversa
[00131] A unidade de processamento de transformada inversa 312 pode estar configurada para receber coeficientes desquantizados 311, também referidos como coeficientes de transformada 311, e aplicar uma transformada aos coeficientes desquantizados 311 de modo de obter blocos residuais reconstruídos 213 no domínio de amostra. Os blocos residuais reconstruídos 213 podem também ser referidos como blocos de transformada 313. A transformada pode ser uma transformada inversa, por exemplo, uma DCT inversa, uma DST inversa, uma transformada inteira inversa ou um processo de transformada inversa conceitualmente similar. A unidade de processamento de transformada inversa 312 pode ainda estar configurada para receber parâmetros de transformada ou informações correspondentes dos dados de imagem codificados 21 (por exemplo, analisando e/ou decodificando, por exemplo, pela unidade de decodificação de entropia 304) para determinar a transformação a ser aplicada nos coeficientes desquantizados 311. Reconstrução
[00132] A unidade de reconstrução 314 (por exemplo, adicionador ou somador 314) pode estar configurada para adicionar o bloco residual reconstruído 313, ao bloco de predição 365 para obter um bloco reconstruído 315 no domínio de amostra, por exemplo, adicionando os valores de amostra do bloco residual reconstruído 313 e os valores de amostra do bloco de predição 365. Filtragem
[00133] A unidade de filtro de loop 320 (ou no loop de codificação ou após o loop de codificação) está configurada para filtrar o bloco reconstruído 315 para obter um bloco filtrado 321, por exemplo, para suavizar transições de pixel, ou de outro modo aperfeiçoar a qualidade de vídeo. A unidade de filtro de loop 320 pode compreender um ou mais filtros de loop tal como um filtro de desbloqueio, um filtro de deslocamento adaptável de amostra (SAO) ou um ou mais outros filtros, por exemplo, um filtro bilateral, um filtro de loop adaptável (ALF), filtros de aguçamento, a suavização ou filtros colaborativos, ou qualquer sua combinação. Apesar da unidade de filtro de loop 320 ser mostrada na Figura 3 como sendo um filtro de loop interno, em outras configurações, a unidade de filtro de loop 320 pode ser implementada como um pós- filtro de loop. Armazenamento Temporário de Imagem Decodificada
[00134] Os blocos de vídeo decodificados 321 de uma imagem são então armazenados no armazenamento temporário de imagem decodificada 330, o qual armazena as imagens descodificadas 331 como imagens de referência para uma subsequente compensação de movimento para outras imagens e/ou para saída respectivamente para exibição.
[00135] O decodificador 30 está configurado para emitir a imagem decodificada 311, por exemplo, através da saída 312, para apresentação ou visualização para um usuário. Predição
[00136] A unidade de interpredição 344 pode ser idêntica à unidade de interpredição 244 (especificamente à unidade de compensação de movimento) e a unidade de intrapredição 354 pode ser idêntica à unidade de interpredição 254 em função, e executa decisões de divisão ou particionamento e predição com base no particionamento e/ou parâmetros de predição ou respectivas informações recebidas dos dados de imagem codificados 21 (por exemplo, por analisando e/ou decodificando, por exemplo, pela unidade de decodificação de entropia 304) A unidade de aplicação de modo 360 pode estar configurada para executar a predição (intra ou interpredição) por bloco com base em imagens reconstruídas, blocos ou respectivas amostras (filtradas ou não filtradas) para obter o bloco de predição 365.
[00137] Quando a fatia de vídeo é codificada como uma fatia intracodificada (I), a unidade de intrapredição 354 da unidade de aplicação de modo 360 está configurada para gerar o bloco de predição 365 para um bloco de imagem da fatia de vídeo corrente com base em um modo de intrapredição sinalizado e dados de blocos previamente decodificados da imagem corrente. Quando a imagem de vídeo é codificada como uma fatia intercodificada (isto é, B, ou P), a unidade de interpredição 344 (por exemplo, unidade de compensação de movimento) das unidades de aplicação de modo 360 está configurada para produzir blocos de predição 365 para um bloco de vídeo da fatia de vídeo corrente com base nos vetores de movimento e outros elementos de sintaxe recebidos da unidade de decodificação de entropia 304. Para interpredição, os blocos de predição podem ser produzidos 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 quadros de referência, Lista 0 e Lista 1, utilizando técnicas de construção padrão com base em imagens de referência armazenadas no DPB 330. O mesmo ou similar pode ser aplicado para ou por modalidades que utilizam grupos de telas lado a lado (por exemplo, grupos de telas lado a lado de vídeo) e/ou telas lado a lado (por exemplo, telas lado a lado de vídeo) além de ou alternativamente a fatias (por exemplo, fatias de vídeo), por exemplo, um vídeo pode ser codificado utilizando grupos de telas lado a lado e/ou telas lado a lado I, P ou B.
[00138] A unidade de aplicação de modo 360 está configurada para determinar as informações de predição para um bloco de vídeo da fatia de vídeo corrente analisando os vetores de movimento ou informações relativas e outros elementos de sintaxe, e utiliza as informações de predição para produzir os blocos de predição para o bloco de vídeo corrente sendo decodificado. Por exemplo, a unidade de aplicação de modo 360 utiliza alguns dos elementos de sintaxe recebidos para determinar um modo de predição (por exemplo, intra ou interpredição) utilizado para codificar os blocos de vídeo da fatia 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 das listas de imagem 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 intercodificado da fatia, e outras informações para decodificar os blocos de vídeo na fatia de vídeo corrente. O mesmo ou similar pode ser aplicado para ou por modalidades que utilizam grupos de telas lado a lado (por exemplo, grupos de telas lado a lado de vídeo) e/ou telas lado a lado (por exemplo, telas lado a lado de vídeo) além de ou alternativamente a fatias (por exemplo, fatias de vídeo), por exemplo, um vídeo pode ser codificado utilizando grupos de telas lado a lado e/ou telas lado a lado I, P ou B.
[00139] As modalidades do decodificador de vídeo 30 como mostrado na Figura 3 podem estar configuradas para particionar e/ou decodificar a imagem utilizando fatias (também referidas como fatias de vídeo), em que uma imagem pode ser particionada em ou decodificada utilizando uma ou mais fatias (tipicamente não sobrepostas), e cada fatia pode compreender um ou mais blocos (por exemplo, CTUs).
[00140] As modalidades do decodificador de vídeo 30 como mostradas na Figura 3 podem estar configuradas para particionar e/ou decodificar a imagem utilizando grupos de telas lado a lado (também referidos grupos de telas lado a lado) e/ou telas lado a lado ( também referidas como telas lado a lado de vídeo), em que uma imagem pode ser particionada ou decodificada utilizando uma ou mais grupos de mais telas lado a lado (tipicamente não sobrepostos), e cada grupo de telas lado a lado pode compreender, por exemplo, um ou mais blocos (por exemplo, CTUs) ou uma ou mais telas lado a lado, em que cada tela lado a lado, por exemplo, pode ser de forma retangular e pode compreender um ou mais blocos (por exemplo, CTUs), por exemplo, blocos completos ou fracionários.
[00141] Outras variações do decodificador de vídeo 30 podem ser utilizadas para decodificar os dados de imagem codificados 21. Por exemplo, o decodificador 30 pode produzir o fluxo de vídeo de saída sem a unidade de filtragem de loop 320. Por exemplo, um decodificador não baseado em transformada 30 pode quantizar inverso o sinal residual diretamente sem a unidade de processamento de transformada inversa 312 para certos blocos ou quadros. Em outra implementação, o decodificador de vídeo 30 pode ter a unidade de quantização inversa 310 e a unidade de processamento de transformada inversa 312 combinadas em uma única unidade.
[00142] Deve ser compreendido que, no codificador 20 e no decodificador 30, um resultado de processamento de uma etapa corrente pode ser adicionalmente processado e então emitido para a próxima etapa. Por exemplo, após a filtragem de interpolação, derivação de vetor de movimento ou filtragem de loop, uma operação adicional, tal como Clip ou deslocamento pode ser executada no resultado do processamento da filtragem de interpolação, derivação de vetor de movimento ou filtragem de loop.
[00143] Deve ser notado que operações adicionais podem ser aplicadas aos vetores de movimento derivados do bloco corrente (incluindo, mas não limitado a vetores de movimento de ponto de controle de modo afim, vetores de movimento de sub-bloco em modos afins, planos, ATMVP, vetores de movimento temporais, e assim por diante). Por exemplo, o valor do vetor de movimento está restrito a uma faixa predeterminada de acordo com seu bit de representação. Se o bit de representação do vetor de movimento for bitDepth, então a faixa é - 2^(bitDepth-1) ~ 2^(bitDepth-1)-1, onde "^" significa exponenciação. Por exemplo, se bitDepth for ajustado igual a 16, a faixa é -32768 ~ 32767; se bitDepth for ajustado igual a 18, a faixa é -131072~131071. Por exemplo, o valor do vetor de movimento derivado (por exemplo, os MVs de quatro sub-blocos 4x4 dentro de um bloco 8x8) está restrito de modo que a diferença máxima entre partes inteiras dos quatro MVs de sub- bloco 4x4 não é mais do que N pixels, tal como não mais do que 1 pixel. Aqui estão dois métodos para restringir o vetor de movimento de acordo com o bitDepth.
[00144] Método 1: remover o excesso de MSB (bit mais significativo) por operações de fluir ux= ( mvx+2bitDepth ) % 2bitDepth (1) mvx = ( ux >= 2bitDepth-1 ) ? (ux − 2bitDepth ) : ux (2) uy= ( mvy+2bitDepth ) % 2bitDepth (3) mvy = ( uy >= 2bitDepth-1 ) ? (uy − 2bitDepth ) : uy (4) onde mvx é um componente horizontal de um vetor de movimento de um bloco de imagem ou um sub-bloco, mvy é um componente vertical de um vetor de movimento de um bloco de imagem ou um sub-bloco, e ux e uy indicam um valor intermediário.
[00145] Por exemplo, se o valor de mvx for -32769, após aplicar a fórmula (1) e (2), o valor resultante é 32767. No sistema de computador, os números decimais são armazenados como complemento de dois. O complemento de dois de -32769 é 1,0111,1111,1111,1111 (17 bits), então o MSB é descartado, de modo que o complemento de dois resultantes é 0111,1111,1111,1111 (número decimal é 32767), o qual é o mesmo que o resultado aplicando a fórmula (1) e (2). ux= ( mvpx + mvdx +2bitDepth ) % 2bitDepth (5) mvx = ( ux >= 2bitDepth-1 ) ? (ux − 2bitDepth ) : ux (6)
uy= ( mvpy + mvdy +2bitDepth ) % 2bitDepth (7) mvy = ( uy >= 2bitDepth-1 ) ? (uy − 2bitDepth ) : uy (8)
[00146] As operações podem ser aplicadas durante a soma de mvp e mvd, como mostrado na fórmula (5) até (8).
[00147] Método 2: remover o excesso de MSB recortando o valor vx = Clip3(-2bitDepth-1, 2bitDepth-1 -1, vx) vy = Clip3(-2bitDepth-1, 2bitDepth-1 -1, vy) onde vx é um componente horizontal de um vetor de movimento de um bloco de imagem ou um sub-bloco, vy é um componente vertical de um vetor de movimento de um bloco de imagem ou um sub-bloco; x, y e z respectivamente correspondem a três valores de entrada do processo de recorte de MV, e a definição da função Clip3 é como segue: x ; z<x Clip3( x, y, z ) = ൝y ; z>y z ; deoutromodo
[00148] A Figura 4 é um diagrama esquemático de um dispositivo de codificação de vídeo 400 de acordo com uma modalidade da descrição. O dispositivo de codificação de vídeo 400 é adequado para implementar as modalidades descrita como aqui descrito. Em uma modalidade, o dispositivo de codificação de vídeo 400 pode ser um decodificador, tal como o decodificador de vídeo 30 de Figura 1A ou um codificador tal como o codificador de vídeo 20 de Figura 1A.
[00149] O dispositivo de codificação de vídeo 400 compreende portas de ingresso 410 (ou portas de entrada 410) e unidades de receptor (Rx) 420 para receber de dados; um processador, unidade lógica, ou unidade de processamento central (CPU) 430 para processar os dados; unidades de transmissor (Tx) 440 e portas de egresso 450 (ou portas de saída 450) para transmitir os dados; e uma memória 460 para armazenar os dados. O dispositivo de codificação de vídeo 400 pode também compreender componentes óticos para elétricos (OE) e componentes elétricos para óticos (EO) acoplados nas portas de ingresso 410, nas unidades de receptor 420, nas unidades de transmissor 440 e nas portas de egresso 450 para egresso ou ingresso de sinais óticos ou elétricos.
[00150] O processador 430 é implementado por hardware e software. O processador 430 pode ser implementado como um ou mais chips de CPU, núcleos (por exemplo, como um processador de múltiplos núcleos), FPGAs, ASICs, e DSPs. O processador 430 está em comunicação com as portas de ingresso 410, unidades de receptor 420, unidades de transmissor 440, portas de egresso 450, e memória 460. O processador 430 compreende um módulo de codificação 470. O módulo de codificação 470 implementa as modalidades descritas acima descritas. Por exemplo, o módulo de codificação 470 implementa, processa, prepara ou provê as várias operações de codificação. A inclusão do módulo de codificação 470 portanto provê um aperfeiçoamento substancial à funcionalidade do dispositivo de codificação de vídeo 400 de vídeo e efetua uma transformação do dispositivo de codificação de vídeo 400 para um diferente estado. Alternativamente, o módulo de codificação 470 é implementado como instruções armazenadas na memória 460 e executadas pelo processador 430.
[00151] A memória 460 pode compreender um ou mais discos, unidades de fita, e unidades de estado sólido e pode ser utilizada como um dispositivo de armazenamento de dados de excesso, para armazenar programas quando tais programas são selecionados para execução, e armazenar instruções e dados que são lidos durante a execução de programa. A memória 460 pode ser, por exemplo, volátil e/ou não volátil e pode ser uma memória somente de leitura (ROM), memória de acesso randômico (RAM), memória endereçável de conteúdo ternário (TCAM), e/ou memória de acesso randômico estática (SRAM).
[00152] A Figura 5 é um diagrama de blocos simplificado de um aparelho 500 que pode ser utilizado para cada ou ambos o dispositivo de fonte 12 e o dispositivo de destino 14 da Figura 1 de acordo com uma modalidade exemplar.
[00153] Um processador 502 no aparelho 500 pode ser uma unidade de processamento central. Alternativamente, o processador 502 pode ser qualquer outro tipo de dispositivo, ou múltiplos dispositivos, capaz de manipular ou processar informações agora existentes ou daqui em diante desenvolvidas. Apesar das implementações descritas poderem ser praticadas com um único processador como mostrado, por exemplo, o processador 502, vantagens em velocidade e eficiência podem ser conseguidas utilizando mais de um processador.
[00154] Uma memória 504 no aparelho 500 pode ser um dispositivo de memória somente de leitura (ROM) ou um dispositivo de memória de acesso randômico (RAM) em uma implementação. Qualquer outro tipo adequado de dispositivo de armazenamento pode ser utilizado como a memória 504. A memória 504 pode incluir um código e dados 506 que são acessados pelo processador 502 utilizando um barramento 512. A memória 504 pode ainda incluir um sistema de operação 508 e programas de aplicação 510 os programas de aplicação 510 incluindo pelo menos um programa que permite o processador 502 executar os métodos aqui descritos. Por exemplo, os programas de aplicação 510 podem incluir aplicações de 1 até N, as quais ainda incluem uma aplicação de codificação de vídeo que executa os métodos aqui descritos.
[00155] O aparelho 500 pode também incluir um ou mais dispositivos de saída, tal como um display 518. O display 518 pode ser, em um exemplo, um display sensível ao toque que combina um display com um elemento sensível ao toque que é operável para detectar entradas de toque. O display 518 pode estar acoplado no processador 502 através do barramento 512.
[00156] Apesar de aqui apresentado como um único barramento, o barramento 512 do aparelho 500 pode ser composto de múltiplos barramentos. Ainda, o armazenamento secundário 514 pode estar diretamente acoplado aos outros componentes do aparelho 500 ou pode ser acessado através de uma rede e pode compreender uma única unidade integrada tal como um cartão de memória, ou múltiplas unidades tal como múltiplos cartões de memória. O aparelho 500 pode assim ser implementado em uma ampla variedade de configurações.
[00157] A unidade de interpretação 244 pode incluir uma unidade de estimativa de movimento (ME) e unidade de compensação de movimento (MC) (não mostradas na Figura 2). A unidade de estimativa de movimento está configurada para receber ou obter o bloco de imagem 203 (bloco de imagem corrente 203 da imagem corrente 201) e uma imagem 331 decodificada, ou pelo menos um ou uma pluralidade de blocos previamente reconstruídos, por exemplo, blocos reconstruídos de uma ou uma pluralidade de outras/diferentes imagens previamente decodificadas 331, para estimativa de movimento. Por exemplo, uma sequência de vídeo pode compreender a imagem corrente e as imagens previamente decodificadas 331, ou em outras palavras a imagem corrente e as imagens previamente decodificadas 331 podem fazer parte de ou formar uma sequência de imagens que forma uma sequência de vídeo. O codificador 200 pode, por exemplo, estar configurado para selecionar um bloco de referência de uma pluralidade de blocos de referência das mesmas ou diferentes imagens da pluralidade de outras imagens e prover uma imagem de referência (ou índice de imagem de referência, ...) e/ou um deslocamento (deslocamento espacial) entre a posição (coordenadas x, y) do bloco de referência e a posição do bloco corrente como parâmetros de interpredição para a unidade de estimativa de movimento (não mostrada na Figura 2). Este deslocamento é também denominado vetor de movimento (MV). A mesclagem é uma importante ferramenta de estimativa de movimento utilizada em HEVC e herdada para VVC.
[00158] Para executar a estimativa de mesclagem, uma lista de candidatos de mesclagem é construída, cada um dos candidatos na lista de candidatos compreende dados de movimento, estes dados de movimento incluindo informações que indicam se uma ou duas listas de imagem de referência são utilizadas, e também incluindo outras informações tal como como um índice de referência e um vetor de movimento para cada lista. Em um exemplo, a lista de candidatos de mesclagem é construída com base nos seguintes candidatos: a. até quatro candidatos de mesclagem espacial que são derivados de cinco blocos vizinhos espaciais; b. um candidato de mesclagem temporal derivado de dois blocos temporais, co-localizados; c. candidatos de mesclagem adicionais que incluem candidatas bi-preditivos combinados e candidatos de vetor de movimento zero.
[00159] Os primeiros candidatos na lista de candidatos de mesclagem são os vizinhos espaciais. Até quatro candidatos são inseridos na lista de mesclagem sequencialmente verificando A1, B1, B0, A0 e B2, nesta ordem, de acordo com a parte direita da Figura 6.
[00160] Além de verificar se um bloco de codificação está disponível e contém informações de movimento, algumas verificações de redundância adicionais são executadas antes de tomar todos os dados de movimento do bloco de codificação como um candidato de mesclagem. Estas verificações de redundância podem ser divididas em duas categorias: a. evitar dados de movimento redundante na lista; b. evitar mesclar duas partições que poderiam ser expressas por outros meios o que criaria uma sintaxe redundante.
[00161] Em um exemplo, N é o número de candidatos de mesclagem espacial, uma verificação de redundância completa compreenderia (N • (N-1))/2 comparações de dados de movimento. No caso dos cinco candidatos de mesclagem espacial potenciais, comparações de dados de dez movimentos seriam necessárias para assegurar que todos os candidatos na lista de mesclagem tenham diferentes dados de movimento. Durante o desenvolvimento de HEVC, as verificações para dados de movimento redundantes foram reduzidas a um subconjunto em um modo que a eficiência de codificação é mantida, enquanto que a lógica de comparação é significativamente reduzida. Na final, não mais do que duas comparações são executadas por candidato resultando em cinco comparações totais. Dada a ordem de {A1, B1, B0, A0, B2}, B0 somente verifica B1, A0 somente verifica A1, e B2 somente verifica A1 e B1. Em um exemplo de verificação de redundância de particionamento, a PU inferior de um particionamento 2N×N é mesclada com aquela superior escolhendo o candidato B1. Isto resultaria em uma CU com duas PUs que têm os mesmos dados de movimento, o que poderia ser igualmente sinalizados como uma CU 2N×2N. No total, esta verificação se aplica para todas as segundas PUs das partições retangulares e assimétricas 2N×N, 2N×nU, 2N×nD, N×2N, nR×2N e nL×2N. É notado que para os candidatos de mesclagem espacial, somente as verificações de redundância são executadas e os dados de movimento são copiados dos blocos candidatos. Com isto, nenhuma escalagem de vetor de movimento é aqui necessária.
[00162] A derivação dos vetores de movimento para o candidato de mesclagem temporal é a mesma que para a Predição de Vetor de Movimento Temporal, TMVP. Como um candidato de mesclagem compreende todos os dados de movimento e a TMVP é somente um vetor de movimento (isto significa, em mesclagem regular somente no máximo uma TMVP candidata é permitida), a derivação dos dados de movimento depende do tipo de fatia. Para fatias bipreditivas, uma TMVP é derivada para cada lista de imagens de referência. Dependendo da disponibilidade da TMVP para cada lista, o tipo de predição é ajustado para bipredição ou para a lista para a qual a TMVP está disponível. Todos os índices de imagem de referência associados são ajustados iguais a zero. Para fatias unipreditivas, a TMVP para a lista 0 é derivada juntamente com o índice de imagem de referência igual a zero.
[00163] Quando pelo menos uma TMVP está disponível e o candidato de mesclagem temporal é adicionado à lista, nenhuma verificação de redundância é executada. Isto torna a construção de lista de mesclagens independente da imagem co-localizada, o que aperfeiçoa a resiliência de erros. Considere o caso onde o candidato de mesclagem temporal seria redundante e portanto não incluído da lista de candidatos de mesclagem. No caso de uma imagem co-localizada perdida, o decodificador não derivaria os candidatos temporais e com isto não pode verificar se este seria redundante. A indexação de todos os candidatos subsequentes seria afetada por isso.
[00164] Por razões de robustez de análise, o número de candidatos na lista de candidatos de mesclagem é fixo. Após os candidatos de mesclagem espacial e temporal foram adicionados, a lista pode não estar cheia (um número de candidatos na lista de candidatos de mesclagem é menor do que o número fixo). De modo a compensar pela perda de eficiência de codificação que vem junto com a sinalização de índice de lista adaptável sem comprimento, candidatos adicionais são gerados. Dependendo do tipo de fatia, até dois tipos de candidatos são utilizados para totalmente popular a lista: a. Candidatos bipreditivos combinados; b. Candidatos de vetor de movimento zero.
[00165] Em fatias bipreditivas, candidatos adicionais podem ser gerados com base nos existentes, combinando a lista 0 de imagens de referência, dados de movimento de um candidato com e os dados de lista 1 de movimento de outro. Isto é feito copiando Δx0, Δy0, Δt0 de um candidato, por exemplo, o primeiro, e Δx1, Δy1, Δt1 de outro, por exemplo, o segundo. As diferentes combinações são predefinidas e dadas na Tabela 1. Tabela 1 Ordem de 0 1 2 3 4 5 6 7 8 9 10 11 Combinação Δx0, Δy0, Δt0 de 0 1 0 2 1 2 0 3 1 3 2 3 Candidato Δx1, Δy1, Δt1 de 1 0 2 0 2 1 3 0 3 1 3 2 Candidato
[00166] Quando a lista ainda não está cheia após adicionar os candidatos bipreditivos combinados, ou para fatias unipreditivas, candidatos de vetor de movimento zero são adicionados. Os candidatos de vetor de movimento zero têm um vetor de movimento de deslocamento zero para fatias unipreditivas e dois vetores de movimento de deslocamento zero para fatias bipreditivas. Os índices de referência são ajustados iguais a zero, e são incrementados por um para cada candidato adicional, até que o número máximo de índices de referência seja atingido. Se candidatos adicionais ainda precisarem ser adicionados, um índice de referência igual a zero é utilizado para criar candidatos adicionais. Para os candidatos adicionais, nenhuma verificação de redundância é executada já que omitir estas verificações não introduzirá uma perda de eficiência de codificação.
[00167] Para cada PU codificada no modo de predição de interimagem, um merge_flag é utilizado para indicar que a mesclagem de blocos é utilizada para derivar os dados de movimento ou não. Um merge_idx é utilizado para determinar o candidato na lista de mesclagem que provê os dados de movimento necessários para a predição compensada em movimento, MCP. Além da sinalização de nível de PU, um número de candidatos na lista de mesclagem é sinalizado no cabeçalho de fatia. Em um exemplo, o valor padrão é cinco, este está representado como uma diferença de cinco (five_minus_max_num_merge_cand). Referindo ao processo de construção de lista de candidatos de mesclagem, o processo total permanece o mesmo apesar deste terminar após a lista conter o número máximo de candidatos de mesclagem. No projeto inicial, o valor máximo para a codificação de índice de mesclagem foi dado por um número de candidatos espaciais e temporais disponíveis na lista. Quando somente dois candidatos estão disponíveis, o índice pode ser eficientemente codificado como um sinalizador. De modo a analisar o índice de mesclagem, toda a lista de candidatos de mesclagem precisa ser construída para conhecer o número real de candidatos.
[00168] Uma aplicação da mesclagem de blocos em HEVC é combinada com um modo de salto. O modo de salto é utilizado para um bloco para indicar que os dados de movimento para o bloco são inferidos, ao invés de explicitamente sinalizados em um fluxo de bits e que o resíduo de predição para o bloco é zero, isto é, nenhum coeficiente de transformada é transmitido. Em HEVC, no início de cada CU em uma fatia de predição de interimagem, um skip_flag é sinalizado que implica o seguinte: a. a CU somente contém uma PU (tipo de partição 2N×2N); b. o modo de mesclagem é utilizado para derivar os dados de movimento (merge_flag igual a 1); c. nenhum dado residual está presente no fluxo de bits.
[00169] Outra ferramenta de estimativa de movimento introduzida em HEVC e inerente em VVC é denominada Predição de Vetor de Movimento Avançada (AMVP). No modo AMVP, os vetores de movimento são codificados em termos de componentes horizontal (x) e vertical (y) como uma diferença para um assim denominado preditor de movimento (MVP). O cálculo de componentes de diferença do vetor de movimento (MVD) é mostrado como MVDx = MVx – MVPx, MVDy = MVy
– MVPy.
[00170] Os vetores de movimento de um bloco corrente são usualmente correlacionados com os vetores de movimento de blocos vizinhos na imagem corrente ou nas imagens anteriormente codificadas. Como os blocos vizinhos são prováveis de corresponder ao mesmo objeto móvel com movimento similar, e o movimento do objeto não é provável mudar abruptamente ao longo do tempo. Consequentemente, utilizando os vetores de movimento em blocos vizinhos como preditores reduz o tamanho da diferença de vetor de movimento sinalizada. Os MVPs são usualmente derivados de vetores de movimento decodificados de blocos vizinhos espaciais ou de blocos temporalmente vizinhos na imagem co-localizada. Em HEVC, a proposta de implicitamente derivar o MVP foi substituída por uma técnica conhecida como competição de vetor de movimento, a qual explicitamente sinaliza o MVP de uma lista de MVPs, é utilizada para derivação de vetor de movimento. A estrutura de bloco quadtree de codificação variável em HEVC pode resultar em um bloco tendo diversos blocos vizinhos com vetores de movimento como candidatos de MVP potenciais. Tomando o vizinho esquerdo como um exemplo, no caso que um bloco de predição de luma 64x64 poder ter 16 blocos de predição de luma 8x4 à esquerda, quando um bloco de árvore de codificação de luma 64x64 não é adicionalmente dividido e o esquerdo é dividido na profundidade máxima. A Predição de Vetor de Movimento Avançada (AMVP) foi introduzida para modificar a competição do vetor de movimento para levar em conta tal estrutura de bloco flexível. Durante o desenvolvimento de HEVC, o projeto de AMVP inicial foi significativamente simplificado para prover um bom equilíbrio entre eficiência codificação e um projeto amigável de implementação.
[00171] O projeto inicial de AMVP incluiu cinco MVPs de três diferentes classes de preditores: três vetores de movimento de vizinhos espaciais, a mediana dos três preditores espaciais e um vetor de movimento escalado de um bloco co-localizado, temporalmente vizinho. Mais ainda, a lista de preditores foi modificada por reordenação para colocar o preditor de movimento mais provável na primeira posição, e removendo candidatos redundantes para assegurar um excesso de sinalização mínimo. Experimentos exaustivos através de todo o processo de padronização investigaram como a complexidade desta predição de vetor de movimento, e esquema de sinalização poderiam ser reduzidos sem sacrificar muito a eficiência de codificação. Isto levou a simplificações significativas do projeto de AMVP tal como removendo o preditor da mediana, reduzindo o número de candidatos da lista de cinco para dois, fixando a ordem de candidato na lista e reduzindo o número de verificações de redundância. O projeto da construção de lista de candidatos de AMVP inclui os seguintes dois candidatos de MVP: • até dois MVPs candidatos espaciais que são derivados de cinco blocos vizinhos espaciais; • um MVP candidato temporal derivado de dois blocos temporais, co-localizados quando ambos os MVPs candidatos espaciais não estão disponíveis ou estes são idênticos; • zero vetores de movimento quando os candidatos espacial, temporal ou ambos não estão disponíveis.
[00172] Na descrição de candidato espacial, o fluxo de processo de derivação para os dois candidatos espaciais A e B está apresentado na Figura 13. Para o candidato A, os dados de movimentos dos dois blocos A0 e A1 no canto inferior esquerdo são levados em conta em uma proposta de duas passagens. Na primeira passagem, é verificado se qualquer um dos blocos de candidatos contém um índice de referência que é o mesmo que o índice de referência do bloco corrente. O primeiro vetor de movimento encontrado será tomado como candidato A. Quando todos os índices de referência de A0 e A1 estão apontando para uma imagem de referência diferente do índice de referência do bloco corrente, o vetor de movimento associado não pode ser utilizado como está. Portanto, em uma segunda passagem, os vectores de movimento precisam ser escalados de acordo com as distâncias temporais entre a imagem de referência candidata e a imagem de referência corrente. A distância temporal é expressa em termos de diferença entre valores de contagem de ordem de imagens (POC), os valores POC são utilizados para definir a ordem de exibição das imagens.
[00173] Para o candidato B, os candidatos B0 até B2 são verificados sequencialmente no mesmo que A0 e A1. A segunda passagem, no entanto, é executada quando os blocos A0 e A1 não contêm nenhuma informação de movimento, isto é, não estão disponíveis ou codificados utilizando predição de intraimagem. Então, candidato A é ajustado igual ao candidato B não escalado, se encontrado, e o candidato B é ajustado igual a uma segunda, variante não escalada ou escalada do candidato B. A segunda passagem pode ser terminada quando ainda podem existir candidatos não escalados potenciais, a segunda passagem pesquisa por MVs não escalados assim como por escalados derivados dos candidatos B0 até B2. No total, este projeto permite processar A0 e A1 independentemente de B0, B1, e B2. A derivação de B deve estar ciente da disponibilidade tanto de A0 quanto A1, de modo a pesquisar por um MV escalado ou não escalado adicional derivado de B0 até B2. Esta dependência significativamente reduz as complexas operações de escalagem de vetor de movimento para o candidato B. Reduzir o número de escalagens de vetor de movimento representa uma significativa redução de complexidade no processo de derivação de preditor de vetor de movimento.
[00174] No processo de seleção de candidato temporal, pode ser visto da Figura 6 que vetores de movimento de blocos vizinhos espaciais à esquerda e superior ao bloco corrente são considerados como candidatos de MVP espacial. Isto pode ser explicado porque os blocos à direita e abaixo do bloco corrente ainda não foram decodificados e com isto, seus dados de movimentação não estão disponíveis. Como a imagem co-localizada é uma imagem de referência a qual já foi decodificada, é possível também considerar dados de movimento do bloco na mesma posição, de blocos à direita do bloco co-localizado ou dos blocos abaixo. Em HEVC, o bloco inferior direito e no centro do bloco corrente foram determinados serem os mais adequados para prover um bom preditor de vetor de movimento temporal (TMVP). Estes candidatos estão ilustrados na Figura 6, onde C0 representa o vizinho inferior direito e C1 representa o bloco central. Os dados de movimento de C0 são considerados primeiro, se os dados de movimento de C0 não forem disponíveis, os dados de movimento do bloco de candidato co- localizado no centro são utilizados para derivar o MVP candidato temporal C. Os dados de movimento de C0 são também considerados como não sendo disponível quando a PU associada pertence a uma CTU além da linha de CTU corrente. Isto minimiza os requisitos de largura de banda de memória para armazenar os dados de movimento co-localizados. Em contraste com os MVP candidatos espaciais, onde os vetores de movimento podem referir à mesma imagem de referência, a escalagem de vetor de movimento é mandatória para o TMVP.
[00175] Tanto para a construção de lista de mesclagem quanto a construção de lista de AMVP um preditor de vetor de movimento baseado em histórico (HMVP) para a lista de mesclagem ou AMVP. Os candidatos de mesclagem de MVP baseado em histórico (HMVP) são adicionados à lista de mesclagem/AMVP após o MVP espacial e o TMVP. Neste método, as informações de movimento de um bloco previamente codificado são armazenadas em uma tabela e utilizadas como MVP para a CU corrente. A tabela com múltiplos HMVP candidatos é mantida durante o processo de codificação/decodificação.
A tabela é reiniciada (esvaziada) quando uma nova linha da CTU é encontrada. Sempre que existe uma CU intercodificada não de sub- bloco, as informações de movimento associadas são adicionadas à última entrada da tabela como um novo HMVP candidato.
[00176] Em VTM4, o tamanho S de tabela HMVP é ajustado para ser 6, o que indica que até 6 candidatos de MVP baseado em histórico (HMVP) podem ser adicionados à tabela. Quando inserindo um novo candidato de movimento na tabela, uma regra restrita de primeiro a entrar, primeiro a sair (FIFO) é utilizada em que a verificação de redundância é primeiramente aplicada para encontrar se existe um HMVP idêntico na tabela. Se existir um HMVP idêntico na tabela, o HMVP idêntico é removido da tabela e todos os HMVP candidatos posteriores são movidos para a frente.
[00177] Os HMVP candidatos poderiam ser utilizados no processo de construção de lista de candidatos de mesclagem/lista de AMVP. Os últimos diversos HMVP candidatos na tabela são verificados em ordem e inseridos na lista de candidato após o TMVP candidato. Uma verificação de redundância é aplicada no HMVP candidatos para o candidato de mesclagem espacial ou temporal.
[00178] Para reduzir o número de operações de verificação de redundância, as seguintes simplificações são introduzidas:
[00179] O número de HMPV candidatos que é utilizado para a geração de lista de mesclagem é ajustado como (N <= 4)? M: (8 - N), em que N indica o número de candidatos existentes na lista de mesclagem e M indica o número de HMVP candidatos disponíveis na tabela.
[00180] Uma vez que o número total de candidatos de mesclagem disponíveis é o mesmo que os candidatos de mesclagem maximamente permitidos menos 1, o processo de construção da lista de candidatos de mesclagem de HMVP é terminado.
[00181] No modo VVC Draft em paralelo para modo inter, o modo de IBC é introduzido.
[00182] A cópia de intrabloco (IBC) é uma ferramenta adotada em extensões HEVC em SCC. Esta significativamente aperfeiçoa a eficiência de codificação de materiais de conteúdo de tela. Como o modo de IBC é implementado como um modo de codificação de nível de bloco, a coincidência de blocos (BM) é executada no codificador para encontrar o vetor de bloco ótimo (ou vetor de movimento) para cada CU. Aqui, um vetor de movimento é utilizado para indicar o deslocamento do bloco corrente para um bloco de referência, o qual já está reconstruído dentro da imagem corrente. O vetor de movimento de luma de uma CU codificada em IBC é em precisão inteira. O vetor de movimento de croma é cortado para precisão inteira também. Quando combinado com AMVR, o modo de IBC pode comutar entre precisões de vetor de movimento de 1 pel e 4 pel. Uma CU codificada em IBC é tratada como o terceiro modo de predição outro que os modos intra ou interpredição.
[00183] Para reduzir o consumo de memória e a complexidade de decodificador, a IBC em VTM4 permite a porção reconstruída da área predefinida que inclui a CTU corrente seja utilizada. Esta restrição permite que o modo de IBC seja implementado utilizando memória em chip local para implementações de hardware.
[00184] No lado de codificador, uma estimativa de movimento baseada em hash é executada para IBC. O codificador executa verificação de RD para blocos com ou largura ou altura não maior do que 16 amostras de luma. Para o modo de não mesclagem, a pesquisa de vetor de bloco é executada utilizando a pesquisa baseada em hash primeiro. Se a pesquisa de hash não retornar um candidato válido, uma coincidência de blocos com base em pesquisa local será executada.
[00185] Na pesquisa baseada em hash, a coincidência de chave hash (CRC de 32 bits) entre o bloco corrente e um bloco de referência é estendida para todos os tamanhos de blocos permitidos. O cálculo de chave hash para cada posição na imagem corrente está baseada em sub-blocos 4x4. Para o bloco corrente de um maior tamanho, uma chave hash é determinada para coincidir com aquela do bloco de referência quando todas as chaves hash de todos os sub-blocos 4×4 coincidem com as chaves hash das localizações de referência correspondentes. Se as chaves hash de múltiplos blocos de referência que coincidirem com aquela do bloco corrente, os custos de vetor de bloco de cada referência coincidida são calculados e aquele com o custo mínimo é selecionado.
[00186] Na pesquisa de coincidência de blocos, a faixa de pesquisa é ajustada para ser N amostras para a esquerda e no topo do bloco corrente dentro da CTU corrente. No início de uma CTU, o valor de N é inicializado para 128 se não existir uma imagem de referência temporal, ou inicializado para 64 se existir pelo menos uma imagem de referência temporal. Uma razão de acertos de hash é definida como a percentagem de amostras na CTU que encontraram uma coincidência utilizando a pesquisa baseada em hash. Enquanto codificando a CTU corrente, se a razão de acertos de hash estiver abaixo de 5%, N é reduzido pela metade.
[00187] No nível de CU, o modo de IBC é sinalizado com um sinalizador e este pode ser sinalizado como modo de IBC AMVP ou modo de saldo/mesclagem de IBC como segue:
[00188] Modo de saldo/mesclagem de IBC: um índice de candidato de mesclagem é utilizado para indicar quais vetores de blocos na lista de blocos codificados de IBC de candidatos vizinhos são utilizados para predizer o bloco corrente. A lista de mesclagem consiste em candidatos espaciais, HMVP, e em pares.
[00189] Modo de IBC AMVP: a diferença de vetor de bloco é codificada no mesmo modo que uma diferença do vetor de movimento.
O método de predição de vetor de bloco utiliza dois candidatos como preditores, um do vizinho esquerdo e um do vizinho superior (se codificados em IBC). Quando nenhum vizinho está disponível, um vetor de bloco padrão será utilizado como um preditor. Um sinalizador é sinalizado para indicar o índice de preditor de vetor do bloco.
[00190] Como a IBC introduzida no modo de mesclagem/salto de IBC e modo de IBC AMVP, existe uma lista de mesclagem de IBC e uma lista de AMVP adicionais a serem construídas com o VVC Draft 4.0.
[00191] Como somente candidatos espaciais (bloco vizinho esquerdo A1, bloco vizinho superior B1, bloco vizinho inferior esquerdo A0, bloco vizinho superior direito B0 e bloco vizinho superior esquerdo B2 como mostrado na Figura 6), candidatos de HMVP (H1… Hk, k é o mesmo que o tamanho de lista de HMVP máximo) e candidatos em pares são utilizados para construir a lista de mesclagem de IBC na ordem no VVC Draft 4.0. A seguinte poda é possível executada durante a construção de lista de mesclagem de IBC: • Poda entre A1 e B1 • Poda entre A0 e A1 • Poda entre B0 e B1 • Poda entre B2 e A1 • Poda entre B2 e B1 • Poda entre o último HMVP candidato Hk e A1 • Poda entre o último HMVP candidato Hk e B1 • Poda entre o penúltimo HMVP candidato Hk-1 e A1 • Poda entre o penúltimo HMVP candidato Hk-1 e B1
[00192] O processamento de poda significa comparar se dois candidatos de mesclagem de IBC são os mesmos. Mais especificamente, o processamento de poda compara se os vetores de blocos entre dois candidatos de mesclagem de IBC são os mesmos.
[00193] Em suma, o número máximo de 9 podas é necessário para construir da lista de mesclagem de IBC do bloco corrente.
[00194] No codificador e decodificador, a poda é retardar o processo de construção da lista de mesclagens. Como em cada estágio da poda, uma condição "se" é verificada, o processo de construção da lista de mesclagem posterior depende destas verificações de condição "se". Quanto mais poda existir na construção de lista de candidatos de mesclagem, mais complexo o processo de codificador e decodificador é. De modo a reduzir a complexidade de construção da lista de mesclagens, as seguintes soluções são introduzidas. Solução 1
[00195] Como, os blocos vizinhos espaciais esquerdo (A1) e superior (B1) são importantes para predizer o bloco corrente utilizando o modo de IBC. Na solução 1, a poda de bloco vizinho espacial entre A1 e B1 é mantida, o restante da poda de bloco vizinho espacial é removido. A poda de HMVP candidato é mantida. Em uma modalidade, a seguinte poda é possível executada durante a construção de lista de mesclagens IBC: • Poda entre A1 e B1 • Poda entre o último HMVP candidato Hk e A1 • Poda entre o último HMVP candidato Hk e B1 • Poda entre o penúltimo HMVP candidato Hk-1 e A1 • Poda entre o penúltimo HMVP candidato Hk-1 e B1.
[00196] Neste caso, o número máximo de podas para construir a lista de candidatos de mesclagem de IBC do bloco corrente é reduzido de 9 para 5. A solução reduziu significativamente a complexidade de construção da lista de mesclagens de IBC tanto para codificador quanto o decodificador.
[00197] Em um exemplo, a lista de candidatos de mesclagem de IBC concreta é construída como segue:
[00198] Se o bloco vizinho A1 estiver disponível e estiver utilizando o modo de IBC, o vetor de bloco do bloco A1 é inserido na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (A1 não está disponível ou A1 não está utilizando o modo de IBC), o vetor de bloco do bloco A1 não é inserido na lista de candidatos de mesclagem de IBC do bloco corrente (primeiro candidato, sem poda).
[00199] Se o bloco vizinho B1 estiver disponível e estiver utilizando o modo de IBC, podar (ou determinar) se o vetor de bloco de B1 é o mesmo que A1. Se o vetor de bloco de B1 não for o mesmo que o vetor de bloco de A1, o vetor de bloco do bloco B1 é inserido na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor de bloco de B1 é o mesmo que o vetor de bloco de A1, ou B1 não está disponível ou B1 não está utilizando o modo de IBC), o vetor de bloco do bloco B1 não é inserido na lista de candidatos de mesclagem de IBC do bloco corrente (poda de A1 e B1).
[00200] Se o bloco vizinho B0 estiver disponível e estiver utilizando o modo de IBC, o vetor de bloco do bloco B0 é inserido na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (B0 não está disponível ou B0 não está utilizando o modo de IBC), o vetor de bloco do bloco B0 não é inserido na lista de candidatos de mesclagem de IBC do bloco corrente (sem poda).
[00201] Se o bloco vizinho A0 estiver disponível e estiver utilizando o modo de IBC, o vetor de bloco do bloco A0 é inserido na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (A0 não está disponível ou A0 não está utilizando o modo de IBC), o vetor de bloco do bloco A0 não é inserido na lista de candidatos de mesclagem de IBC do bloco corrente (sem poda).
[00202] Se o bloco vizinho B2 estiver disponível e estiver utilizando o modo de IBC, o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que 4, o vetor de bloco do bloco B2 é inserido na lista de candidatos de mesclagem de IBC do bloco correto. De outro modo (B2 não está disponível ou B2 não está utilizando o modo de IBC ou o tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que 4), o vetor de bloco do bloco B2 não é inserido na lista de candidatos de mesclagem de IBC do bloco corrente (sem poda).
[00203] Se o último HMVP candidato Hk estiver disponível e estiver utilizando o modo de IBC, e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que um valor, o valor igual ao número de candidato de mesclagem de IBC máximo menos um; e o vetor de bloco de Hk não é o mesmo que A1 e B1, inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (Hk não está disponível ou Hk não está utilizando o modo de IBC ou o tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidatos de mesclagem de IBC máximo menos um, ou o vetor de bloco de Hk é o mesmo que o vetor de bloco de vetor de A1, ou o vetor de bloco de Hk é o mesmo que o vetor de bloco de B1) não inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente (poda de Hk e A1, Hk e B1).
[00204] Se o penúltimo HMVP candidato Hk-1 estiver disponível e estiver utilizando o modo de IBC, e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que um valor, o valor igual ao número de candidatos de mesclagem de IBC máximo menos um, e o vetor de bloco de Hk-1 não é o mesmo que A1 e B1, inserir o vetor de bloco de Hk-1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (Hk-1 não está disponível ou Hk-1 não está utilizando o modo de IBC ou o tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidato de mesclagem de IBC máximo menos um, ou o vetor de bloco de Hk-1 é o mesmo que o vetor de bloco de A1, ou o vetor de bloco de Hk-1 é o mesmo que o vetor de bloco de B1) não inserir o vetor de bloco do bloco de Hk-1 na lista de candidatos de mesclagem de IBC do bloco corrente (poda Hk-1 e A1, Hk-1 e B1).
[00205] Inserir os HMVP candidatos restantes um a um, se o candidato estiver disponível e estiver utilizando o modo de IBC, e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que o número de candidato de mesclagem de IBC máximo menos um (sem poda).
[00206] Inserir o candidato em dupla, o tamanho de lista de candidatos de mesclagem de IBC corrente é menor do que o número de candidatos de mesclagem de IBC máximo (sem poda). Solução 2
[00207] Como, os blocos vizinhos espaciais esquerdo (A1) e superior (B1), são importantes para predizer o bloco corrente utilizando o modo de IBC. Na solução 2, o bloco vizinho espacial A1 e B1 são mantidos para inserir no candidato de mesclagem de IBC, os candidatos de bloco vizinhos espaciais restantes são removidos. A poda de HMVP candidato é mantida como está. Em uma modalidade, a seguinte poda é possível executada durante a construção de lista de mesclagens IBC: • Poda entre A1 e B1 • Poda entre o último HMVP candidato Hk e A1 • Poda entre o último HMVP candidato Hk e B1 • Poda entre o penúltimo HMVP candidato Hk-1 e A1 • Poda entre o penúltimo HMVP candidato Hk-1 e B1
[00208] Neste caso, o número máximo de podas para construir a lista de candidatos mesclagem de IBC do bloco corrente é reduzido de 9 para
5. A solução reduziu significativamente a complexidade de construção da lista de mesclagens de IBC tanto para o codificador quanto o decodificador.
[00209] Em um exemplo, a lista de candidatos de mesclagem de IBC concreta é construída como segue:
[00210] Se o bloco A1 vizinho estiver disponível e estiver utilizando o modo de IBC, inserir o vetor de bloco do bloco A1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (A1 não está disponível ou A1 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco A1 na lista de candidatos de mesclagem de IBC do bloco corrente (primeiro candidato, sem poda).
[00211] Se o bloco B1 vizinho estiver disponível e estiver utilizando o modo de IBC, podar (ou determinar) se o vetor de bloco de B1 é o mesmo que A1. Se o vetor de bloco de B1 não for o mesmo que o vetor de bloco de A1, inserir o vetor de bloco do bloco B1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor de bloco de B1 é o mesmo que o vetor de bloco de A1, ou B1 não está disponível ou B1 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco A1 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de A1 e B1).
[00212] Se o último HMVP candidato Hk estiver disponível e estiver utilizando o modo de IBC, e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que um valor, o valor igual ao número de candidato de mesclagem de IBC máximo menos um, e o vetor de bloco de Hk não for o mesmo que A1 e B1, inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (Hk não está disponível ou Hk não está utilizando o modo de IBC ou o tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidatos de mesclagem de IBC máximo menos um, ou o vetor de bloco de Hk é o mesmo que o vetor de bloco de A1, ou o vetor de bloco de Hk é o mesmo que o vetor de bloco de B1), não inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente (poda de Hk e A1, Hk e B1).
[00213] Se o penúltimo HMVP candidato Hk-1 estiver disponível e estiver utilizando o modo de IBC, e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que um valor, valor igual ao número de candidatos de mesclagem de IBC máximo menos um, e o vetor de bloco de Hk-1 não for o mesmo que A1 e B1, inserir o vetor de bloco de Hk-1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (Hk-1 não está disponível ou Hk-1 não está utilizando o modo de IBC ou o tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidatos de mesclagem de IBC máximo menos um, ou o vetor de bloco de Hk-1 é o mesmo que o vetor de bloco de A1, ou o vetor de bloco de Hk-1 é o mesmo que o vetor de bloco de B1) não inserir o vetor de bloco de Hk-1 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de Hk-1 e A1, Hk-1 e B1).
[00214] Inserir os HMVP candidatos restantes um a um, se o candidato estiver disponível e estiver utilizando o modo de IBC, e o tamanho de lista de candidatos de mesclagem de IBC corrente é menor do que o número de candidatos de mesclagem de IBC máximo menos um (sem poda).
[00215] Inserir o candidato em par, o tamanho de lista de candidatos de mesclagem de IBC corrente é menor do que o número de candidatos de mesclagem de IBC máximo (sem poda). Solução 3
[00216] De acordo com a solução 3, a poda de vetor de bloco de bloco vizinho espacial é mantida a mesma. Para a poda de HMVP candidato, o vetor de bloco do último HMVP candidato Hk é podado com o vetor de bloco do bloco vizinho espacial A1 e B1. A poda de HMVP candidato restantes é removida. Em uma modalidade, a seguinte poda é possível executada durante a construção de lista de mesclagens de IBC: • Poda entre A1 e B1
• Poda entre A0 e A1 • Poda entre B0 e B1 • Poda entre B2 e A1 • Poda entre B2 e B1 • Poda entre o último HMVP candidato Hk e A1 • Poda entre o último HMVP candidato Hk e B1.
[00217] Neste caso, o número máximo de podas para construir a lista de candidatos de mesclagem de IBC do bloco corrente é reduzido de 9 para 7. A solução significativamente reduziu a complexidade de construção de lista de mesclagens de IBC tanto para o codificador quanto o decodificador.
[00218] Em um exemplo, a lista de candidatos de mesclagem de IBC concreta é construída como segue:
[00219] Se o bloco A1 vizinho estiver disponível e estiver utilizando o modo de IBC, inserir o vetor de bloco do bloco A1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (A1 não está disponível ou A1 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco A1 na lista de candidatos de mesclagem de IBC do bloco corrente (primeiro candidato, sem poda).
[00220] Se o bloco B1 vizinho estiver disponível e estiver utilizando o modo de IBC, podar (ou determinar) se o vetor de bloco de B1 é o mesmo que A1. Se o vetor de bloco de B1 não for o mesmo que o vetor de bloco de A1, inserir o vetor de bloco do bloco B1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor de bloco de B1 é o mesmo que o vetor de bloco de A1, ou B1 não está disponível ou B1 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco A1 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de A1 e B1).
[00221] Se o bloco B0 vizinho estiver disponível e estiver utilizando o modo de IBC, podar (ou determinar) se o vetor de bloco de B0 é o mesmo que B1. Se o vetor de bloco de B0 não for o mesmo que o vetor de bloco de B1, inserir o vetor de bloco do bloco B0 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor de bloco de B0 é o mesmo que o vetor de bloco de B1, ou B0 não está disponível ou B0 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco B0 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de B0 e B1).
[00222] Se o bloco vizinho A0 estiver disponível e estiver utilizando o modo de IBC, podar (ou determinar) se o vetor de bloco de A0 é o mesmo que A1. Se o vetor de bloco de A0 não for o mesmo que o vetor de bloco de A1, inserir o vetor de bloco do bloco A0 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor de bloco de A0 é o mesmo que o vetor de bloco de A1, ou A0 não está disponível ou A0 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco A0 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de A0 e A1).
[00223] Se o bloco vizinho B2 estiver disponível e estiver utilizando o modo de IBC, e o tamanho de lista de mesclagem de IBC corrente for menor do que 4, podar (ou determinar) se o vetor de bloco de B2 é o mesmo que A1 e se o vetor de bloco de B2 é o mesmo que B1. Se o vetor de bloco de B2 não for o mesmo que o vetor de bloco de A1, e o vetor de bloco de B2 não for o mesmo que B1, inserir o vetor de bloco do bloco B2 na lista de candidatos de mesclagem de IBC do bloco cor - rente. De outro modo (o vetor de bloco de B2 é o mesmo que o vetor de bloco de A1 ou B1, ou B0 não está disponível ou B0 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco B0 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de B2 e A1 e poda de B2 B1).
[00224] Se o último HMVP candidato Hk estiver disponível e estiver utilizando o modo de IBC, e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que um valor, o valor igual ao número de candidatos de mesclagem de IBC máximo menos um, e o vetor de bloco de Hk não é o mesmo que A1 e B1, inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (Hk não está disponível ou Hk não está utilizando o modo de IBC ou o tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidatos de mesclagem de IBC máximo menos um, ou o vetor de bloco de Hk é o mesmo que o vetor de bloco de vetor de A1, ou o vetor de bloco de Hk é o mesmo que o bloco de vetor de B1) não inserir o bloco de vetor de Hk na lista de candidatos de mesclagem de IBC do bloco corrente (poda Hk e A1, Hk e B1).
[00225] Inserir os HMVP candidatos restantes um a um, se o candidato estiver disponível e estiver utilizando o modo de IBC e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que um valor, o valor igual ao número de candidato de mesclagem do IBC máximo menos um (sem poda).
[00226] Inserir o candidato em par, o tamanho de lista de candidatos de mesclagem de IBC corrente é menor do que o número de candidatos de mesclagem de IBC máximo (sem poda). Solução 4
[00227] De acordo com a solução 4, a poda de vetor de bloco de bloco vizinho espacial é mantida a mesma. Para a poda de HMVP candidato, o vetor de bloco do último HMVP candidato Hk e do penúltimo HMVP candidato Hk-1 é podado com o vetor de bloco do bloco vizinho espacial A1. A poda de HMVP candidato restantes é removida. Em uma modalidade, a seguinte poda é possível executada durante a construção da lista de mesclagem de IBC: • Poda entre A1 e B1 • Poda entre A0 e A1
• Poda entre B0 e B1 • Poda entre B2 e A1 • Poda entre B2 e B1 • Poda entre o último HMVP candidato Hk e A1 • Poda entre o penúltimo HMVP candidato Hk-1 e A1.
[00228] Neste caso, o número máximo de podas para construir a lista de candidatos de mesclagem de IBC do bloco corrente é reduzido de 9 para 7. A solução reduziu significativamente a complexidade da construção da lista de mesclagem de IBC tanto para o codificador quanto o decodificador.
[00229] Em um exemplo, a lista de candidatos de mesclagem de IBC concreta é construída como segue:
[00230] Se bloco vizinho A1 estiver disponível e estiver utilizando o modo de IBC, inserir o vetor de bloco do bloco A1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (A1 não está disponível ou A1 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco A1 na lista de candidatos de mesclagem de IBC do bloco corrente (primeiro candidato, sem poda).
[00231] Se o bloco vizinho B1 estiver disponível e estiver utilizando o modo de IBC, podar (ou determinar) se o vetor de bloco de B1 é o mesmo que A1. Se o vetor de bloco de B1 não for o mesmo que o vetor de bloco de A1, inserir o vetor de bloco do bloco B1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor de bloco de B1 é o mesmo que o vetor de bloco de A1, ou B1 não está disponível ou B1 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco A1 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de A1 e B1).
[00232] Se o bloco vizinho B0 estiver disponível e estiver utilizando o modo de IBC, podar (ou determinar) se o vetor de bloco de B0 é o mesmo que B1. Se o vetor de bloco de B0 não for o mesmo que o vetor de bloco de B1, inserir o vetor de bloco do bloco B0 na lista de candidatos de mesclagem do IBC do bloco corrente. De outro modo (o vetor de bloco de B0 é o mesmo que o vetor do bloco de B1, ou B0 não está disponível ou B0 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco B0 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de B0 e B1).
[00233] Se o bloco vizinho A0 estiver disponível e estiver utilizando o modo de IBC, podar (ou determinar) se o vetor do bloco de A0 é o mesmo que A1. Se o vetor de bloco de A0 não for o mesmo que o vetor de bloco de A1, inserir o vetor de bloco do bloco A0 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor de bloco de A0 é o mesmo que o vetor de bloco de A1, ou A0 não está disponível ou A0 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco A0 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de A0 e A1).
[00234] Se o bloco vizinho B2 estiver disponível e estiver utilizando o modo de IBC, e o tamanho de lista de mesclagem de IBC corrente for menor do que 4, podar (ou determinar) se o vetor de bloco de B2 é o mesmo que A1 e se o vetor de bloco de B2 é o mesmo que B1. Se o vetor de bloco de B2 não for o mesmo que o vetor de bloco de A1 e o vetor de bloco de B2 não for o mesmo que B1, inserir o vetor de bloco do bloco B2 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor de bloco de B2 é o mesmo que o vetor de bloco de A1 ou B1, ou B0 não está disponível ou B0 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco B0 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de B2 e A1 e poda de B2 B1).
[00235] Se o último HMVP candidato Hk estiver disponível e estiver utilizando o modo de IBC, e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que um valor, o valor igual ao número de candidatos de mesclagem de IBC máximo menos um, e o vetor de bloco de Hk não é o mesmo que A1, inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (Hk não está disponível ou Hk não está utilizando o modo de IBC ou o tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidatos de mesclagem de IBC máximo menos um, ou o vetor de bloco de Hk é o mesmo que o vetor de bloco de A1), não inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente (poda de Hk e A1).
[00236] Se o penúltimo HMVP candidato Hk-1 estiver disponível e estiver utilizando o modo de IBC, e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que um valor, o valor igual ao número de candidatos de mesclagem de IBC máximo menos um, e o vetor de bloco de Hk-1 não é o mesmo que A1, inserir o vetor de bloco de Hk-1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (Hk-1 não está disponível ou Hk-1 não está utilizando o modo de IBC ou o tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidatos de mesclagem de IBC máximo menos um, ou o vetor de bloco de Hk-1 é o mesmo que o vetor de bloco de A1), não inserir o vetor do bloco de Hk-1 na lista de candidatos de mesclagem de IBC do bloco corrente (poda Hk-1 e B1).
[00237] Inserir os HMVP candidatos restantes um a um, se o candidato estiver disponível e estiver utilizando o modo de IBC e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que o número de candidatos de mesclagem de IBC máximo menos um (sem poda).
[00238] Inserir o candidato em par, o tamanho de lista de candidatos de mesclagem de IBC corrente é menor do que o número de candidatos de mesclagem de IBC máximo (sem poda). Solução 5
[00239] De acordo com a solução 5, a poda de vetor de bloco do bloco vizinho espacial é mantida a mesma. Para a poda do HMVP candidato, o vetor de bloco do último HMVP candidato Hk e o penúltimo HMVP candidato Hk-1 é podado com o vetor de bloco de bloco vizinho espacial B1. A poda de HMVP candidatos restantes é removida. Em uma modalidade, a seguinte poda é possível executado durante a construção de lista de mesclagem de IBC: • Poda entre A1 e B1 • Poda entre A0 e A1 • Poda entre B0 e B1 • Poda entre B2 e A1 • Poda entre B2 e B1 • Poda entre o último HMVP candidato Hk e B1 • Poda entre o penúltimo HMVP candidato Hk-1 e B1
[00240] Neste caso, o número máximo de podas para construir a lista de candidatos de mesclagem de IBC do bloco corrente é reduzido de 9 para 7. A solução reduziu significativamente a complexidade da construção de lista de mesclagem do IBC tanto para o codificador quanto o decodificador.
[00241] Em um exemplo, a lista de candidatos de mesclagem de IBC concreta é construída como segue:
[00242] Se o bloco vizinho A1 estiver disponível e estiver utilizando o modo de IBC, inserir o vetor de bloco do bloco A1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (A1 não está disponível ou A1 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco A1 na lista de candidatos de mesclagem de IBC do bloco corrente (primeiro candidato, sem poda).
[00243] Se o bloco vizinho B1 estiver disponível e está utilizando o modo de IBC, podar (ou determinar) se o vetor de bloco de B1 é o mesmo que A1. Se o vetor de bloco de B1 não for o mesmo que o vetor de bloco de A1, inserir o vetor de bloco do bloco B1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor de bloco de B1 é o mesmo que o vetor de bloco de A1, ou B1 não está disponível ou B1 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco A1 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de A1 e B1).
[00244] Se o bloco vizinho B0 estiver disponível e estiver utilizando o modo de IBC, podar (ou determinar) se o vetor de bloco de B0 é o mesmo que B1. Se o vetor de bloco de B0 não for o mesmo que o vetor de bloco de B1, inserir o vetor de bloco de B0 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor de bloco de B0 é o mesmo que o vetor de bloco de B1, ou B0 não está disponível ou B0 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco B0 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de B0 e B1).
[00245] Se o bloco vizinho A0 estiver disponível e estiver utilizando o modo de IBC, podar (ou determinar) se o vetor do bloco de A0 é o mesmo que A1. Se o vetor de bloco de A0 não for o mesmo que o vetor de bloco de A1, inserir o vetor de bloco do bloco A0 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor de bloco de A0 é o mesmo que o vetor de bloco de A1, ou A0 não está disponível ou A0 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco A0 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de A0 e A1).
[00246] Se o bloco vizinho B2 estiver disponível e estiver utilizando o modo de IBC e o tamanho de lista de mesclagem de IBC corrente for menor do que 4, podar (ou determinar) se o vetor de bloco de B2 é o mesmo que A1 e se o vetor de bloco de B2 é o mesmo que B1. Se o vetor de bloco de B2 não for o mesmo que o vetor de bloco de A1 e o vetor de bloco de B2 não for o mesmo que B1, inserir o vetor de bloco do bloco B2 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor de bloco de B2 é o mesmo que o vetor de bloco de A1 ou B1, ou B0 não está disponível ou B0 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco B0 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de B2 e A1 e poda de B2 B1).
[00247] Se o último HMVP candidato Hk estiver disponível e estiver utilizando o modo de IBC e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que um valor, o valor igual ao número de candidatos de mesclagem de IBC máximo menos um, e o vetor de bloco de Hk não é o mesmo que B1, inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (Hk não está disponível ou Hk não está utilizando o modo de IBC ou o tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidatos de mesclagem de IBC máximo menos um, ou o vetor de bloco de Hk é o mesmo que o vetor de bloco de B1), não inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente (poda de Hk e B1).
[00248] Se o penúltimo HMVP candidato Hk-1 estiver disponível e estiver utilizando o modo de IBC, e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que um valor, o valor igual ao número de candidatos de mesclagem de IBC máximo menos um, e o vetor de bloco do Hk-1 não é o mesmo que B1, inserir o vetor de bloco do Hk-1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (Hk-1 não está disponível ou Hk-1 não está utilizando o modo de IBC ou tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidatos de mesclagem de IBC máximo menos um, ou o vetor de bloco de Hk-1 é o mesmo que o vetor de bloco de B1), não inserir o vetor de bloco de Hk-1 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de Hk-1 e B1).
[00249] Inserir os HMVP candidatos restantes um a um, se o candidato estiver disponível e estiver utilizando o modo de IBC e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que o número de candidatos de mesclagem de IBC máximo menos um (sem poda).
[00250] Inserir candidato em par, o tamanho de lista de candidatos de mesclagem de IBC corrente é menor do que o número de candidatos de mesclagem de IBC máximo (sem poda). Solução 6
[00251] De acordo com a solução 6, nesta solução o último candidato da lista de candidatos de mesclagem de IBC é permitido utilizando o modo de HMVP, o processo de poda de construção de lista de mesclagem de IBC nesta solução não é mudado, mas este método introduziu um método de construção de lista de mesclagem mais eficiente.
[00252] Em um exemplo, a lista de candidatos de mesclagem de IBC concreta é construída como segue:
[00253] Se o bloco vizinho A1 estiver disponível e estiver utilizando o modo de IBC, inserir o vetor de bloco do bloco A1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (A1 não está disponível ou A1 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco A1 na lista de candidatos de mesclagem de IBC do bloco corrente (primeiro candidato, sem poda).
[00254] Se o bloco vizinho B1 estiver disponível e estiver utilizando o modo de IBC, podar (ou determinar) se o vetor de bloco de B1 é o mesmo que A1. Se o vetor de bloco de B1 não for o mesmo que o vetor de bloco de A1, inserir o vetor de bloco do bloco B1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor de bloco de B1 é o mesmo que o vetor de bloco de A1, ou B1 não está disponível ou B1 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco A1 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de A1 e B1).
[00255] Se o bloco vizinho B0 estiver disponível e estiver utilizando o modo de IBC, podar (ou determinar) se o vetor de bloco de B0 é o mesmo que B1. Se o vetor de bloco de B0 não for o mesmo que o vetor de bloco de B1, inserir o vetor de bloco do bloco B0 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor de bloco de B0 é o mesmo que o vetor do bloco de B1, ou B0 não está disponível ou B0 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco B0 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de B0 e B1).
[00256] Se o bloco vizinho A0 estiver disponível e estiver utilizando o modo de IBC, podar (ou determinar) se o vetor de bloco de A0 é o mesmo que A1. Se o vetor de bloco de A0 não for o mesmo que o vetor de bloco de A1, inserir o vetor de bloco do bloco A0 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor de bloco de A0 é o mesmo que o vetor de bloco de A1, ou A0 não está disponível ou A0 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco A0 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de A0 e A1).
[00257] Se o bloco vizinho B2 estiver disponível e estiver utilizando o modo de IBC, e o tamanho de lista de mesclagem de IBC corrente for menor do que 4, podar (ou determinar) se o vetor de bloco de B2 é o mesmo que A1 e se o vetor de bloco de B2 é o mesmo que B1. Se o vetor de bloco de B2 não for o mesmo que o vetor de bloco de A1 e o vetor de bloco de B2 não for o mesmo que B1, inserir o vetor de bloco do bloco B2 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor de bloco de B2 é o mesmo que o vetor de bloco de A1 ou B1, ou B0 não está disponível ou B0 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco B0 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de B2 e A1, poda de B2 e B1).
[00258] Se o último HMVP candidato Hk estiver disponível e estiver utilizando o modo de IBC, e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que o número de candidatos de mesclagem de IBC máximo, e o vetor de bloco de Hk não é o mesmo que A1 e B1, inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (Hk não está disponível ou Hk não está utilizando o modo de IBC ou o tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidatos de mesclagem de IBC máximo, ou o vetor de bloco de Hk é o mesmo que o vetor de bloco de A1, ou o vetor de bloco de Hk é o mesmo que o vetor de bloco de B1), não inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente (poda de Hk e A1, Hk e B1).
[00259] Se o penúltimo HMVP candidato Hk-1 estiver disponível e estiver utilizando o modo de IBC, e o tamanho de lista de candidatos de mesclagem de IBC corrente é menor do que o número de candidatos de mesclagem de IBC máximo e o vetor de bloco de Hk-1 não é o mesmo que A1 e B1, inserir o vetor de bloco do Hk-1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (Hk-1 não está disponível ou Hk-1 não está utilizando o modo de IBC ou o tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidatos de mesclagem de IBC máximo ou o vetor de bloco de Hk-1 é o mesmo que o vetor de bloco de A1, ou o vetor de bloco de Hk-1 é o mesmo que o vetor de bloco de B1), não inserir o vetor de bloco de Hk-1 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de Hk-1 e A1, Hk-1 e B1).
[00260] Inserir os HMVP candidatos restantes um a um, se o candidato estiver disponível e estiver utilizando o modo de IBC, e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que o número de candidatos de mesclagem de IBC máximo (sem poda).
[00261] Inserir o candidato em par, o tamanho de lista de candidatos de mesclagem de IBC corrente é menor do que o número de candidatos de mesclagem de IBC máximo (sem poda). Solução 7
[00262] De acordo com a solução 7, a poda de vetor de bloco do bloco vizinho espacial é mantida a mesma. Para a pode de HMVP candidato, o vetor de bloco do último HMVP candidato Hk e do penúltimo HMVP candidato Hk-1 é podado com o vetor de bloco do primeiro bloco vizinho espacial de A1 e B1. Se nenhum de A1 ou B1 já estiver dentro da lista de mesclagem de IBC, então nenhum HMVP candidato está comprovado como candidato espacial.
[00263] A poda dos HMVP candidatos restantes é removida. Em uma modalidade, a poda seguinte é o pior caso possível de processo de poda durante a construção de lista de mesclagens de IBC: • Poda entre A1 e B1 • Poda entre A0 e A1 • Poda entre B0 e B1 • Poda entre B2 e A1 • Poda entre B2 e B1 • Poda entre o último HMVP candidato Hk e A1 ou Hk e B1 • Poda entre o penúltimo HMVP candidato Hk-1 e A1 ou Hk-1 e B1
[00264] Neste caso, o número máximo de podas para construir a lista de candidatos de mesclagem de IBC do bloco corrente é reduzido de 9 para 7. A solução significativamente reduziu a complexidade de construção de lista de mesclagem de IBC tanto para o codificador quanto o decodificador.
[00265] Em um exemplo, a lista de candidatos de mesclagem de IBC concreta é construída como segue:
[00266] Se o bloco vizinho A1 estiver disponível e estiver utilizando o modo de IBC, inserir o vetor de bloco do bloco A1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (A1 não está disponível ou A1 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco A1 na lista de candidatos de mesclagem de IBC do bloco corrente (primeiro candidato, sem poda).
[00267] Se o bloco vizinho B1 estiver disponível e estiver utilizando o modo de IBC, podar (ou determinar) se o vetor de bloco de B1 é o mesmo que A1. Se o vetor de bloco de B1 não for o mesmo que o vetor de bloco de A1, inserir o vetor de bloco do bloco B1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor de bloco de B1 é o mesmo que o vetor de bloco de A1, ou B1 não está disponível ou B1 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco A1 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de A1 e B1).
[00268] Se o bloco vizinho B0 estiver disponível e estiver utilizando o modo de IBC, podar (ou determinar) se o vetor de bloco de B0 é o mesmo que B1. Se o vetor de bloco de B0 não for o mesmo que o vetor de bloco de B1, inserir o vetor de bloco do bloco B0 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor do bloco de B0 é o mesmo que o vetor do bloco de B1, ou B0 não está disponível ou B0 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco B0 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de B0 e B1).
[00269] Se o bloco vizinho A0 estiver disponível e estiver utilizando o modo de IBC, podar (ou determinar) se o vetor do bloco de A0 é o mesmo que A1. Se o vetor de bloco de A0 não for o mesmo que o vetor de bloco de A1, inserir o vetor de bloco do bloco A0 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor de bloco de A0 é o mesmo que o vetor de bloco de A1, ou A0 não está disponível ou A0 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco A0 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de A0 e A1).
[00270] Se o bloco vizinho B2 estiver disponível e estiver utilizando o modo de IBC e o tamanho de lista de mesclagem de IBC corrente for menor do que 4, podar (ou determinar) se o vetor de bloco de B2 é o mesmo que A1 e se o vetor de bloco de B2 é o mesmo que B1. Se o vetor de bloco de B2 não for o mesmo que o vetor de bloco de A1 e o vetor de bloco de B2 não for o mesmo que B1, inserir o vetor de bloco do bloco B2 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor de bloco de B2 é o mesmo que o vetor de bloco de A1 ou B1, ou B0 não está disponível ou B0 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco B0 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de B2 e A1 e poda de B2 B1).
[00271] Se A1 já estiver na lista de mesclagem de IBC, então,
[00272] Se o último HMVP candidato Hk estiver disponível e estiver utilizando o modo de IBC e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que um valor, o valor igual ao número de candidatos de mesclagem de IBC máximo menos um, e o vetor de bloco de Hk não for o mesmo que A1, inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (Hk não está disponível ou Hk não está utilizando o modo de IBC ou o tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidatos de mesclagem de IBC máximo menos um, ou o vetor de bloco de Hk é o mesmo que o vetor de bloco de A1), não inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente (poda de Hk e A1).
[00273] Se o penúltimo HMVP candidato Hk-1 estiver disponível e estiver utilizando o modo de IBC, e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que um valor, o valor igual ao número de candidatos de mesclagem de IBC máximo menos um, e o vetor de bloco de Hk-1 não é o mesmo que A1, inserir o vetor de bloco de Hk-1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (Hk-1 não está disponível ou Hk-1 não está utilizando o modo de IBC ou tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidatos de mesclagem de IBC máximo menos um, ou o vetor de bloco de Hk-1 é o mesmo que o vetor de bloco de A1), não inserir o vetor de bloco de Hk-1 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de Hk-1 e A1).
[00274] De outro modo, se A1 não estiver na lista de mesclagem de IBC e B1 já estiver na lista de mesclagem de IBC, então,
[00275] Se o último HMVP candidato Hk estiver disponível e estiver utilizando o modo de IBC e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que um valor, o valor igual ao número de candidatos de mesclagem de IBC máximo menos um, e o vetor de bloco de Hk não é o mesmo que B1, inserir o vetor de bloco de Hk na lista de mesclagem de candidatos do bloco corrente do IBC. De outro modo (Hk não está disponível ou Hk não está utilizando o modo de IBC ou o tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidatos de mesclagem de IBC máximo menos um, ou o vetor de bloco de Hk é o mesmo que o vetor de bloco de B1), não inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente (poda de Hk e B1).
[00276] Se o penúltimo HMVP candidato Hk-1 estiver disponível e estiver utilizando o modo de IBC, e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que um valor, o valor igual ao número de candidatos de mesclagem de IBC máximo menos um, e o vetor de bloco do Hk-1 não é o mesmo que B1, inserir o vetor de bloco do Hk-1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (Hk-1 não está disponível ou Hk-1 não está utilizando o modo de IBC ou tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidatos de mesclagem de IBC máximo menos um, ou o vetor de bloco de Hk-1 é o mesmo que o vetor de bloco de B1), não inserir o vetor de bloco de Hk-1 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de Hk-1 e B1).
[00277] De outro modo, se nenhum de A1 e B1 estiver pronto na lista de mesclagem de IBC, então,
[00278] Se o último HMVP candidato Hk estiver disponível e estiver utilizando o modo de IBC e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que um valor, o valor igual ao número de candidatos de mesclagem de IBC máximo menos um, inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (Hk não está disponível ou Hk não está utilizando o modo de IBC ou o tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidatos de mesclagem de IBC máximo menos um), não inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente (sem poda).
[00279] Se o penúltimo HMVP candidato Hk-1 estiver disponível e estiver utilizando o modo de IBC, e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que um valor, o valor igual ao número de candidatos de mesclagem de IBC máximo menos um, inserir o vetor de bloco de Hk-1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (Hk-1 não está disponível ou Hk-1 não está utilizando o modo de IBC ou o tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidatos de mesclagem de IBC máximo menos um), não inserir o vetor de bloco de Hk-1 na lista de candidatos de mesclagem de IBC do bloco corrente (sem poda).
[00280] Inserir os HMVP candidatos restantes um a um, se o candidato estiver disponível e estiver utilizando o modo de IBC e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que o número de candidatos de mesclagem de IBC máximo menos um (sem poda).
[00281] Inserir o candidato em par, o tamanho de lista de candidatos de mesclagem de IBC corrente é menor do que o número de candidatos de mesclagem de IBC máximo (sem poda). Solução 8
[00282] De acordo com a solução 8, a poda de vetor de bloco do bloco vizinho espacial é mantida a mesma. Para a poda de HMVP candidato poda,
[00283] o vetor de bloco do último HMVP candidato Hk e o penúltimo HMVP candidato Hk-1 são podados com o vetor de bloco do bloco vizinho espacial de A1, quando A1 já está na lista de mesclagem de IBC, e B1 não está na lista de mesclagem de IBC;
[00284] o vetor de bloco do último HMVP candidato Hk e do penúltimo HMVP candidato Hk-1 são podados com o vetor de bloco do bloco vizinho espacial de B1, quando B1 já está na lista de mesclagem do IBC, e A1 não está na lista de mesclagem de IBC;
[00285] o vetor de bloco do último HMVP candidato Hk é podado com o vetor de bloco do bloco vizinho espacial de B1, tanto A1 quanto B1 já estiverem na lista de mesclagem de IBC;
[00286] Se nenhum de A1 ou B1 já estiver dentro da lista de mesclagem de IBC, então nenhum HMVP candidato está comprovado como candidato espacial.
[00287] Neste caso, o número máximo de podas para construir a lista de candidatos de mesclagem de IBC do bloco corrente é reduzido de 9 para 7. A solução significativamente reduziu a complexidade de construção de lista de mesclagem de IBC tanto para o codificador quanto o decodificador.
[00288] Em um exemplo, a lista de candidatos de mesclagem de IBC concreta é construída como segue:
[00289] Se o bloco vizinho A1 estiver disponível e estiver utilizando o modo de IBC, inserir o vetor de bloco do bloco A1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (A1 não está disponível ou A1 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco A1 na lista de candidatos de mesclagem de IBC do bloco corrente (primeiro candidato, sem poda).
[00290] Se o bloco vizinho B1 estiver disponível e estiver utilizando o modo de IBC, podar (ou determinar) se o vetor de bloco de B1 é o mesmo que A1. Se o vetor de bloco de B1 não for o mesmo que o vetor de bloco de A1, inserir o vetor de bloco de bloco B1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor de bloco de B1 é o mesmo que o vetor de bloco de A1, ou B1 não está disponível ou B1 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco A1 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de A1 e B1).
[00291] Se o bloco vizinho B0 estiver disponível e estiver utilizando o modo de IBC, podar (ou determinar) se o vetor de bloco de B0 é o mesmo que B1. Se o vetor de bloco de B0 não for o mesmo que o vetor de bloco de B1, inserir o vetor de bloco do bloco B0 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor de bloco de B0 é o mesmo que o vetor de bloco de B1, ou B0 não está disponível ou B0 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco B0 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de B0 e B1).
[00292] Se o bloco vizinho A0 estiver disponível e estiver utilizando o modo de IBC, podar (ou determinar) se o vetor do bloco de A0 é o mesmo que A1. Se o vetor de bloco de A0 não for o mesmo que o vetor de bloco de A1, inserir o vetor de bloco do bloco A0 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor de bloco de A0 é o mesmo que o vetor de bloco de A1, ou A0 não está disponível ou A0 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco A0 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de A0 e A1).
[00293] Se o bloco vizinho B2 estiver disponível e estiver utilizando o modo de IBC e o tamanho de lista de mesclagem de IBC corrente for menor do que 4, podar (ou determinar) se o vetor de bloco de B2 é o mesmo que A1 e se o vetor de bloco de B2 é o mesmo que B1. Se o vetor de bloco de B2 não for o mesmo que o vetor de bloco de A1 e o vetor de bloco de B2 não for o mesmo que B1, inserir o vetor de bloco do bloco B2 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor de bloco de B2 é o mesmo que o vetor de bloco de A1 ou B1, ou B0 não está disponível ou B0 não está utilizando o modo de IBC), não inserir o vetor de bloco do bloco B0 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de B2 e A1 e poda de B2 B1).
[00294] Se A1 já estiver na lista de mesclagem de IBC e B1 não estiver na lista, então,
[00295] Se o último HMVP candidato Hk estiver disponível e estiver utilizando o modo de IBC e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que um valor, o valor igual ao número de candidatos de mesclagem de IBC máximo menos um, e o vetor de bloco de Hk não é o mesmo que A1, inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (Hk não está disponível ou Hk não está utilizando o modo de IBC ou o tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidatos de mesclagem de IBC máximo menos um, ou o vetor de bloco de Hk é o mesmo que o vetor de bloco de A1), não inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente (poda de Hk e A1).
[00296] Se o penúltimo HMVP candidato Hk-1 estiver disponível e estiver utilizando o modo de IBC, e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que um valor, o valor igual ao número de candidatos de mesclagem de IBC máximo menos um, e o vetor de bloco de Hk-1 não é o mesmo que A1, inserir o vetor de bloco de Hk-1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (Hk-1 não está disponível ou Hk-1 não está utilizando o modo de IBC ou tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidatos de mesclagem de IBC máximo menos um, ou o vetor de bloco de Hk-1 é o mesmo que o vetor do bloco de A1), não inserir o vetor do bloco de Hk-1 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de Hk-1 e A1).
[00297] De outro modo, se A1 não estiver na lista de mesclagem de IBC e B1 já estiver na lista de mesclagem de IBC, então,
[00298] Se o último HMVP candidato Hk estiver disponível e estiver utilizando o modo de IBC e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que um valor, o valor igual ao número de candidatos de mesclagem de IBC máximo menos um, e o vetor de bloco de Hk não é o mesmo que B1, inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (Hk não está disponível ou Hk não está utilizando o modo de IBC ou o tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidatos de mesclagem de IBC máximo menos um, ou o vetor de bloco de Hk é o mesmo que o vetor de bloco de B1), não inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente (poda de Hk e B1).
[00299] Se o penúltimo HMVP candidato Hk-1 estiver disponível e estiver utilizando o modo de IBC, e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que um valor, o valor igual ao número de candidatos de mesclagem de IBC máximo menos um, e o vetor de bloco do Hk-1 não é o mesmo que B1, inserir o vetor de bloco do Hk-1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (Hk-1 não está disponível ou Hk-1 não está utilizando o modo de IBC ou tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidatos de mesclagem de IBC máximo menos um, ou o vetor de bloco de Hk-1 é o mesmo que o vetor de bloco de B1), não inserir o vetor de bloco de Hk-1 na lista de candidatos de mesclagem de IBC do bloco corrente (poda de Hk-1 e B1).
[00300] De outro modo, se tanto A1 quanto B1 já estiverem na lista de mesclagem de IBC, então,
[00301] Se o último HMVP candidato Hk estiver disponível e estiver utilizando o modo de IBC e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que um valor, o valor igual ao número de candidatos de mesclagem de IBC máximo menos um, e o vetor de bloco de Hk não é mesmo que A1 e o vetor de bloco de Hk- não é o mesmo que B1, inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (Hk não está disponível ou Hk não está utilizando o modo de IBC ou o tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidatos de mesclagem de IBC máximo menos um, ou o vetor de bloco de Hk é o mesmo que o vetor de bloco de A1 ou o vetor de bloco de Hk é o mesmo que o vetor de bloco de B1), não inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente (poda de Hk e A1 e B1).
[00302] De outro modo, se nenhum de A1 e B1 já estiver na lista de mesclagem de IBC, então,
[00303] Se o último HMVP candidato Hk estiver disponível e estiver utilizando o modo de IBC e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que um valor, o valor igual ao número de candidatos de mesclagem de IBC máximo menos um, inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (Hk não está disponível ou Hk não está utilizando o modo de IBC ou o tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidatos de mesclagem de IBC máximo menos um), não inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente (sem poda).
[00304] Se o penúltimo HMVP candidato Hk-1 estiver disponível e estiver utilizando o modo de IBC, e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que um valor, o valor igual ao número de candidatos de mesclagem de IBC máximo menos um, inserir o vetor de bloco de Hk-1 na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (Hk-1 não está disponível ou Hk-1 não está utilizando o modo de IBC ou o tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidatos de mesclagem de IBC máximo menos um), não inserir o vetor de bloco de Hk-1 na lista de candidatos de mesclagem de IBC do bloco corrente (sem poda).
[00305] Inserir os HMVP candidatos restantes um a um, se o candidato estiver disponível e estiver utilizando o modo de IBC e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que o número de candidatos de mesclagem de IBC máximo menos um (sem poda).
[00306] Inserir o candidato em par, o tamanho de lista de candidatos de mesclagem de IBC corrente é menor do que o número de candidatos de mesclagem de IBC máximo (sem poda). Solução 9
[00307] De acordo com a solução 9, no topo da solução 1 o vizinho espacial B0 com base na disponibilidade de B0 e B1; o vizinho espacial A0 com base na disponibilidade de A0 e A1; o vizinho espacial B2 com base na disponibilidade de B2, B1 e A1,
[00308] No exemplo,
[00309] Se o bloco vizinho B0 estiver disponível e estiver utilizando o modo de IBC e B1 não estiver disponível, o vetor de bloco do bloco B0 é inserido na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (B0 não está disponível ou B0 não está utilizando o modo de IBC ou B1 está disponível), o vetor de bloco do bloco B0 não é inserido na lista de candidatos de mesclagem de IBC do bloco corrente (sem poda).
[00310] Se o bloco vizinho A0 estiver disponível e estiver utilizando o modo de IBC e A1 não estiver disponível, o vetor de bloco do bloco A0 é inserido na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (A0 não está disponível ou A0 não está utilizando o modo de IBC ou A1 está disponível), o vetor de bloco do bloco A0 não é inserido na lista de candidatos de mesclagem de IBC do bloco corrente (sem poda).
[00311] Se o bloco vizinho B2 estiver disponível e estiver utilizando o modo de IBC tanto A1 quanto B1 não estiverem disponíveis, o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que 4, o vetor de bloco do bloco B2 é inserido na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (B2 não está disponível ou B2 não está utilizando o modo de IBC ou o tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que 4 ou A1 está disponível ou B1 está disponível), o vetor de bloco do bloco B2 não é inserido na lista de candidatos de mesclagem de IBC do bloco corrente (sem poda).
[00312] Nesta solução, nenhuma poda adicional é adicionada, mas mais eficiência de codificação é conseguida comparada com a solução
1. Solução 10
[00313] De acordo com a solução 10, qualquer uma das soluções 1 até 9 podem ser combinadas juntas para reduzir a complexidade de construção de lista de mesclagem de IBC.
[00314] Em um exemplo para a solução 10, a solução 2 e solução 3 são combinadas. Como os blocos vizinhos espaciais esquerdo (A1) e superior (B1) são importantes para predizer o bloco corrente utilizando o modo de IBC. Neste exemplo, a poda de bloco vizinho espacial entre A1 e B1 é mantida, os vetores de blocos dos blocos vizinhos espaciais restantes não são inseridos na lista de mesclagem de IBC. Para a pode de HMVP candidato, o vetor de bloco do último HMVP candidato Hk é podado com o vetor de bloco do bloco vizinho espacial A1 e B1. Em uma modalidade, a seguinte poda é possível executada durante a construção de lista de mesclagem de IBC: • Poda entre A1 e B1 • Poda entre o último HMVP candidato Hk e A1 • Poda entre o último HMVP candidato Hk e B1.
[00315] Neste caso, o número máximo de podas para construir a lista de candidatos de mesclagem de IBC do bloco corrente é reduzido de 9 para 3. A solução significativamente reduziu a complexidade de construção de lista de mesclagem de IBC tanto para o codificador quanto o decodificador.
[00316] Em um exemplo, o último candidato da lista de candidatos de mesclagem de IBC é permitido utilizando o modo de HMVP.
[00317] Em um exemplo, a lista de candidatos de mesclagem de IBC concreta é construída como segue:
[00318] Se o bloco vizinho A1 estiver disponível e estiver utilizando o modo de IBC, o vetor de bloco do bloco A1 é inserido na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (A1 não está disponível ou A1 não está utilizando o modo de IBC), o vetor de bloco do bloco A1 não é inserido na lista de candidatos de mesclagem de IBC do bloco corrente (primeiro candidato, sem poda).
[00319] Se o bloco vizinho B1 estiver disponível e estiver utilizando o modo de IBC e o vetor de bloco do bloco A1 é inserido na lista de candidatos de mesclagem de IBC do bloco corrente, podar (ou determinar) se o vetor de bloco de B1 é o mesmo que A1. Se o vetor de bloco de B1 não for o mesmo que o vetor de bloco de A1, o vetor de bloco do bloco B1 é inserido na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (o vetor de bloco de B1 é o mesmo que o vetor de bloco de A1, ou B1 não está disponível ou B1 não está utilizando o modo de IBC), o vetor de bloco do bloco B1 não é inserido na lista de candidatos de mesclagem de IBC do bloco corrente (poda de A1 e B1).
[00320] Se o último HMVP candidato Hk estiver disponível e estiver utilizando o modo de IBC, e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que um valor, o valor igual ao número de candidatos de mesclagem de IBC máximo menos um; e o vetor de bloco de Hk não é o mesmo que A1 e B1, inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente. De outro modo (Hk não está disponível ou Hk não está utilizando o modo de IBC ou o tamanho de lista de candidatos de mesclagem de IBC corrente não é menor do que o número de candidatos de mesclagem de IBC máximo menos um, ou o vetor de bloco de Hk é o mesmo que o vetor de bloco de A1, ou o vetor de bloco de Hk é o mesmo que o vetor de bloco de B1) não inserir o vetor de bloco de Hk na lista de candidatos de mesclagem de IBC do bloco corrente (poda de Hk e A1, Hk e B1).
[00321] Inserir os HMVP candidatos restantes um a um, se o candidato estiver disponível e estiver utilizando o modo de IBC, e o tamanho de lista de candidatos de mesclagem de IBC corrente for menor do que o número de candidatos de mesclagem de IBC máximo menos um (sem poda).
[00322] Em alguns exemplos, ainda inserir o candidato em par, o tamanho de lista de candidatos de mesclagem de IBC corrente é menor do que o número de candidatos de mesclagem de IBC máximo (sem poda).
[00323] Em um exemplo, para o processo de decodificação para unidades de codificação codificadas no modo de predição de IBC.
8.6.1 Processo de Decodificação Geral para Unidades de Codificação Codificadas no Modo de Previsão de IBC
[00324] As entradas para este processo são: uma localização de luma (xCb, yCb) que especificam a amostra superior esquerda do bloco de codificação corrente em relação à amostra de luma superior esquerda da imagem corrente, uma variável cbWidth que especifica a largura do bloco de codificação corrente em amostras de luma, uma variável cbHeight que especifica a altura do bloco de codificação corrente em amostras de luma, uma variável treeType que especifica se uma árvore única ou uma dupla é utilizada e se uma árvore dupla for utilizada, isto especifica se a árvore corrente corresponde aos componentes de luma ou croma.
[00325] O resultado deste processo é uma imagem reconstruída modificada antes de filtragem em loop.
[00326] O processo de derivação para parâmetros de quantização é invocado com a localização de luma (xCb, yCb), a largura do bloco de codificação corrente em amostras de luma cbWidth e a altura do bloco de codificação corrente em amostras de luma cbHeight, e a variável treeType como entradas.
[00327] A variável IsGt4by4 é derivada como segue: IsGt4by4 = (cbWidth * cbHeight) > 16 (1111).
[00328] O processo de decodificação para unidades de codificação codificadas no modo de predição de IBC consiste nas seguintes etapas ordenadas:
[00329] 1. Os componentes do vetor de bloco da unidade de codificação corrente são derivados como segue:
[00330] O processo de derivação para os componentes de vetor de bloco é invocado com a localização de bloco de codificação de luma (xCb, yCb), a largura de bloco de codificação de luma cbWidth e a altura de bloco de codificação de luma cbHeight como entradas, e o vetor de bloco de luma bvL como saída.
[00331] Quando treeType é igual a SINGLE_TREE, o processo de derivação para o bloco de croma é invocado com vetor de bloco de luma bvL como entrada, e vetor de bloco de croma bvC como saída.
[00332] 2. As amostras de predição da unidade de codificação corrente são derivadas como segue:
[00333] O processo de decodificação para blocos de IBC como especificado na cláusula 8.6.3.1 é invocado com a localização de bloco de codificação de luma (xCb, yCb), a largura de bloco de codificação de luma cbWidth e a altura de bloco de codificação de luma cbHeight, o vetor de bloco de luma bvL, a variável cIdx ajustada igual a 0 como entradas, e as amostras de predição de IBC (predSamples) que estão em uma rede (cbWidth)x(cbHeight) predSamplesL de amostras de luma de predição como saídas.
[00334] Quando treeType é igual a SINGLE_TREE, as amostras de predição da unidade de codificação corrente são derivadas como segue:
[00335] - O processo de decodificação para blocos de IBC como especificado na cláusula 8.6.3.1 é invocado com a localização de bloco de codificação de luma (xCb, yCb), a largura de bloco de codificação de luma cbWidth e a altura de bloco de codificação de luma cbHeight, o vetor de bloco croma bvC e a variável cIdx ajustada igual a 1 como entradas, e as amostras de predição de IBC (predSamples) que estão em uma rede (cbWidth/SubWidthC)x(cbHeight/SubHeightC) predSamplesCb de amostras de predição de croma para os componentes de croma Cb como saídas.
[00336] - O processo de decodificação para blocos de IBC como especificado na cláusula 8.6.3.1 é invocado com a localização do bloco de codificação de luma (xCb, yCb), a largura de bloco de codificação de luma cbWidth e a altura de bloco de codificação de luma cbHeight, o vetor de bloco de croma bvC e a variável cIdx ajustada igual a 2 como entradas, e as amostras de predição de IBC (predSamples) que estão em uma rede (cbWidth/SubWidthC)x(cbHeight/SubHeightC) predSamplesCr de amostras de croma de predição para os componentes de croma Cr como saídas.
[00337] 3. As amostras residuais da unidade de codificação corrente são derivadas como segue:
[00338] - O processo de decodificação para o sinal residual de blocos de codificação codificados no modo de interpredição é invocado com a localização (xTb0, yTb0) ajustada igual à localização de luma (xCb, yCb), a largura nTbW ajustada igual à largura de bloco de codificação de luma cbWidth, a altura nTbH ajustada igual à altura de bloco de codificação de luma cbHeight e a variável cIdx ajustada igual a 0 como entradas e a rede resSamplesL como saída.
[00339] - Quando treeType é igual a SINGLE_TREE, o processo de decodificação para o sinal residual de blocos de codificação codificados no modo de interpredição é invocado com a localização (xTb0, yTb0) ajustada igual à localização de croma (xCb/SubWidthC, yCb/SubHeightC), a largura nTbW ajustada igual à largura de bloco de codificação de croma cbWidth/SubWidthC, a altura nTbH ajustada igual à altura de bloco de codificação de croma cbHeight/SubHeightC e a variável cIdx ajustada igual a 1 como entradas, e a rede resSamplesCb como saída.
[00340] - Quando treeType é igual a SINGLE_TREE, o processo de decodificação para o sinal residual de blocos de codificação codificados no modo de interpredição é invocado com a localização (xTb0, yTb0) ajustada igual à localização de croma (xCb/SubWidthC, yCb/SubHeightC), a largura nTbW ajustada igual à largura de bloco de codificação de croma cbWidth/SubWidthC, a altura nTbH ajustada igual à altura de bloco de codificação de croma cbHeight/SubHeightC e a variável cIdxset igual a 2 como entradas, e a rede resSamplesCr como saída.
[00341] 4. As amostras reconstruídas da unidade de codificação corrente são derivadas como segue:
[00342] - O processo de reconstrução de imagem para um componente de cor é invocado com a localização de bloco (xCurr, yCurr) ajustada igual a ( xCb, yCb ), a largura de bloco nCurrSw ajustada igual a cbWidth, a altura de bloco nCurrSh ajustada igual a cbHeight, variável cIdx ajustada igual a 0, a rede (cbWidth)x(cbHeight) predSamples ajustada igual a predSamplesL e a rede (cbWidth)x(cbHeight) resSamples ajustada igual a resSamplesL como entradas, e a saída é uma imagem reconstruída modificada antes de filtragem em loop.
[00343] - Quando treeType é igual a SINGLE_TREE, o processo de reconstrução de imagem para um componente de cor é invocado com a localização de bloco ( xCurr, yCurr ) ajustada igual a ( xCb/SubWidthC, yCb/SubHeightC ), a largura de bloco nCurrSw ajustada igual a cbWidth/SubWidthC, a altura de bloco nCurrSh ajustada igual a cbHeight/SubHeightC, a variável cIdx ajustada igual a 1, a rede (cbWidth/SubWidthC)x(cbHeight/SubHeightC) predSamples ajustada igual a predSamplesCb e a rede
(cbWidth/SubWidthC)x(cbHeight/SubHeightC) resSamples ajustada igual a resSamplesCb como entradas, e a saída é uma imagem reconstruída modificada antes de filtragem em loop.
[00344] - Quando treeType é igual a SINGLE_TREE, o processo de reconstrução de imagem para um componente de cor é invocado com a localização de bloco ( xCurr, yCurr ) ajustada igual a ( xCb/SubWidthC, yCb/SubHeightC ), a largura de bloco nCurrSw ajustada igual a cbWidth/SubWidthC, a altura de bloco nCurrSh ajustada igual a cbHeight/SubHeightC, a variável cIdx ajustada igual a 2, a rede (cbWidth/SubWidthC)x(cbHeight/SubHeightC) predSamples ajustada igual a predSamplesCr e a rede (cbWidth/SubWidthC)x(cbHeight/SubHeightC) resSamples ajustada igual a resSamplesCr como entradas, e a saída é uma imagem reconstruída modificada antes de filtragem em loop.
8.6.2 Processo de Derivação para Componentes de Vetor para Blocos de IBC
8.6.2.1 Geral
[00345] As entradas para este processo são: uma localização de luma (xCb, yCb) da amostra superior esquerda do bloco de codificação de luma corrente em relação à amostra de luma superior esquerda da imagem corrente, uma variável cbWidth que especifica a largura do bloco de codificação corrente em amostras de luma, uma variável cbHeight que especifica a altura do bloco de codificação corrente em amostras de luma.
[00346] As saídas deste processo são: o vetor de bloco de luma em precisão de amostra fracionária 1/16 bvL.
[00347] O vetor de bloco de luma mvL é derivado como segue:
[00348] - O processo de derivação para a predição de vetor de bloco de luma de IBC como especificado na cláusula 8.6.2.2 é invocado com a localização de luma (xCb, yCb), as variáveis cbWidth e entradas cbHeight, e a saída sendo o vetor de bloco de luma bvL.
[00349] Quando general_merge_flag[ xCb ][ yCb ] é igual a 0, o seguinte se aplica:
[00350] 1. A variável bvd é derivada como segue: bvd[ 0 ] = MvdL0[ xCb ][ yCb ][ 0 ] (1112) bvd[ 1 ] = MvdL0[ xCb ][ yCb ][ 1 ] (1113)
[00351] 2. O processo de arredondamento para vetores de movimento é invocado com mvX ajustado igual a bvL, rightShift ajustado igual a AmvrShift, e leftShift ajustado igual a AmvrShift como entradas e o bvL arredondado como saída.
[00352] 3. O vetor de bloco de luma bvL é modificado como segue: u[ 0 ] = ( bvL[ 0 ] + bvd[ 0 ] + 218 ) % 218 (1114) bvL[ 0 ] = ( u[ 0 ] >= 217 ) ? ( u[ 0 ] − 218 ) : u[ 0 ] (1115) u[ 1 ] = ( bvL[ 1 ] + bvd[ 1 ] + 218 ) % 218 (1116) bvL[ 1 ] = ( u[ 1 ] >= 217 ) ? ( u[ 1 ] − 218 ) : u[ 1 ] (1117) NOTA 1 – Os valores resultantes de bvL[ 0 ] e bvL[ 1 ] como acima especificado estarão sempre na faixa de −217 a 217 − 1, inclusive.
[00353] Quando IsGt4by4 é igual a TRUE, o processo de atualização para a lista de preditores de vetor de bloco baseado em histórico como especificada na cláusula 8.6.2.6 é invocada com o vetor de bloco de luma bvL.
[00354] É um requisito de conformidade de fluxo de bits que o vetor de bloco de luma bvL deve obedecer às seguintes restrições: CtbSizeY é maior do que ou igual a ( ( yCb + ( bvL[ 1 ] >> 4 ) ) & ( CtbSizeY − 1 ) ) + cbHeight. IbcVirBuf[ 0 ][ ( x + (bvL[ 0 ] >> 4 ) ) & ( IbcBufWidthY − 1 ) ][ ( y + (bvL[1] >> 4 ) ) & ( CtbSizeY − 1) ] não deve ser igual a −1 para x = xCb..xCb + cbWidth − 1 e y = yCb..yCb + cbHeight − 1.
8.6.2.2 Processo de Derivação para Predição de Vetor de Bloco de
Luma de IBC
[00355] Este processo é somente invocado quando CuPredMode[ 0 ][ xCb ][ yCb ] é igual a MODE_IBC, onde ( xCb, yCb ) especifica a amostra superior esquerda do bloco de codificação de luma corrente em relação à amostra de luma superior esquerda da imagem corrente.
[00356] As entradas para este processo são: uma localização de luma (xCb, yCb) para a amostra superior esquerda do bloco de codificação de luma corrente em relação à amostra de luma superior esquerda da imagem corrente, uma variável cbWidth que especifica a largura do bloco de codificação corrente em amostras de luma, uma variável cbHeight que especifica a altura do bloco de codificação corrente em amostras de luma.
[00357] As saídas deste processo são: o vetor de bloco de luma em precisão de amostra fracionária 1/16 bvL.
[00358] O vetor de bloco de luma bvL é derivado das seguintes etapas ordenadas:
[00359] 1. Quando IsGt4by4 é igual a TRUE, o processo de derivação para candidatos de vetor de bloco espacial de unidades de codificação vizinhas, como especificado na cláusula 8.6.2.3, é invocado com a localização de bloco de codificação de luma (xCb, yCb), a largura de bloco de codificação de luma cbWidth e a altura cbHeight como entradas, e as saídas sendo os sinalizadores de disponibilidade availableFlagA1, availableFlagB1 e os vetores de blocos bvA1 e bvB1.
[00360] 2. Quando IsGt4by4 é igual a TRUE, a lista de candidatos de vetor de bloco, bvCandList, é construída como segue: i=0 se (availableFlagA1) bvCandList [ i++ ] = bvA1 (1118) se (availableFlagB1)
bvCandList [ i++ ] = bvB1
[00361] 3. A variável numCurrCand é derivada como segue: IsGt4by4 é igual a TRUE, numCurrCand é ajustado igual ao número de candidatos de mesclagem na bvCandList. De outro modo (IsGt4by4 é igual a FALSE), numCurrCand é ajustado igual a 0.
[00362] 4. Quando numCurrCand é menor do que MaxNumIbcMergeCand e NumHmvpIbcCand é maior do que 0, o processo de derivação de candidatos de vetor de bloco baseado em histórico de IBC como especificado em 8.6.2.4 é invocado com bvCandList, e numCurrCand como entradas, e bvCandList e numCurrCand modificados como saídas.
[00363] 5. Quando numCurrCand é menor do que MaxNumIbcMergeCand, o seguinte se aplica até numCurrCand ser igual a MaxNumIbcMergeCand: bvCandList[ numCurrCand ][ 0 ] é ajustado igual a 0. bvCandList[ numCurrCand ][ 1 ] é ajustado igual a 0. numCurrCand é aumentado por 1.
[00364] 6. A variável bvIdx é derivada como segue: bvIdx = general_merge_flag[ xCb ][ yCb ] ? merge_idx[ xCb ][ yCb ] : mvp_l0_flag[ xCb ][ yCb ] (1119)
[00365] 7. As seguintes atribuições são feitas: bvL[ 0 ] = bvCandList[ mvIdx ][ 0 ] (1120) bvL[ 1 ] = bvCandList[ mvIdx ][ 1 ] (1121)
8.6.2.3 Processo de Derivação para Candidatos de Vetor de Bloco Espacial de IBC
[00366] As entradas para este processo são: uma localização de luma (xCb, yCb) da amostra superior esquerda do bloco de codificação de luma corrente em relação à amostra de luma superior esquerda da imagem corrente,
uma variável cbWidth que especifica a largura do bloco de codificação corrente em amostras de luma, uma variável cbHeight que especifica a altura do bloco de codificação corrente em amostras de luma.
[00367] As saídas deste processo são como segue: os sinalizadores de disponibilidade availableFlagA1 e availableFlagB1 das unidades de codificação vizinhas, os vetores de bloco em precisão de amostra fracionária 1/16 bvA1, e bvB1 das unidades de codificação vizinhas, Para a derivação de availableFlagA1 e mvA1, o seguinte se aplica: A localização de luma (xNbA1, yNbA1) dentro do bloco de codificação de luma vizinho é ajustada igual a (xCb − 1, yCb + cbHeight − 1).
[00368] O processo de derivação para disponibilidade de bloco vizinho é invocado com a localização de luma corrente (xCurr, yCurr) ajustada igual a ( xCb, yCb ), a localização de luma vizinha ( xNbA1, yNbA1 ), checkPredModeY ajustada igual a TRUE, e cIdx ajustado igual a 0 como entradas, e a saída é atribuída ao sinalizador de disponibilidade de bloco availableA1.
[00369] As variáveis availableFlagA1 e bvA1 são derivadas como segue:
[00370] Se availableA1 for igual a FALSE, availableFlagA1 é ajustado igual a 0 e ambos os componentes de bvA1 são ajustados igual a 0.
[00371] De outro modo, availableFlagA1 é ajustado igual a 1 e as seguintes atribuições são feitas: bvA1 = MvL0[ xNbA1 ][ yNbA1 ] (1122)
[00372] Para a derivação de availableFlagB1 e bvB1 o seguinte se aplica:
[00373] A localização de luma (xNbB1, yNbB1) dentro do bloco de codificação de luma vizinho é ajustada igual a (xCb + cbWidth − 1, yCb
− 1).
[00374] O processo de derivação para disponibilidade de bloco vizinho é invocado com a localização de luma corrente (xCurr, yCurr) ajustada igual a ( xCb, yCb ), a localização de luma vizinha (xNbB1, yNbB1 ), checkPredModeY ajustada igual a TRUE, e cIdx ajustado igual a 0 como entradas, e a saída é atribuída ao sinalizador de disponibilidade de bloco availableB1.
[00375] As variáveis availableFlagB1 e bvB1 são derivadas como segue:
[00376] Se uma ou mais das seguintes condições forem verdadeiras, availableFlagB1 é ajustado igual a 0 e ambos os componentes de bvB1 são ajustados igual a 0: availableB1 é igual a FALSE. availableA1 é igual a TRUE e as localizações de luma ( xNbA1, yNbA1 ) e ( xNbB1, yNbB1 ) têm os mesmos vetores de bloco.
[00377] De outro modo, availableFlagB1 é ajustado igual a 1 e as seguintes atribuições são feitas: bvB1 = MvL0[ xNbB1 ][ yNbB1 ] (1123).
8.6.2.4 Processo de Derivação para Candidatos de Vetor de Bloco Baseados em Histórico de IBC
[00378] As entradas para este processo são: uma lista de candidatos de vetor de bloco bvCandList, o número de candidatos de vetor de bloco disponíveis na lista numCurrCand.
[00379] As saídas para este processo são: a lista de candidatos de vetor de bloco modificada bvCandList, o número modificado de candidatos de vetor de movimento na lista numCurrCand.
[00380] As variáveis isPrunedA1 e isPrunedB1 são ajustadas ambas iguais a FALSE.
[00381] Para cada candidato em HmvpIbcCandList[ hMvpIdx ] com índice hMvpIdx = 1..NumHmvpIbcCand, as seguintes etapas ordenadas são repetidas até que numCurrCand seja igual a MaxNumIbcMergeCand:..
[00382] 1. A variável sameMotion é derivada como segue:
[00383] Se todas as condições seguintes forem verdadeiras para qualquer candidato de vetor de bloco N com N sendo A1 ou B1, sameMotion e isPrunedN são ambos ajustados iguais a TRUE: IsGt4by4 é igual a TRUE. hMvpIdx é igual a 1.
[00384] O candidato HmvpIbcCandList[NumHmvpIbcCand − hMvpIdx] é igual ao candidato de vetor de bloco N.
[00385] isPrunedN é igual a FALSE.
[00386] De outro modo, sameMotion é ajustado igual a FALSE.
[00387] 2. Quando sameMotion é igual a FALSE, o candidato HmvpIbcCandList[NumHmvpIbcCand − hMvpIdx] é adicionado à lista de candidatos de vetor de bloco como segue: bvCandList[ numCurrCand++ ] = HmvpIbcCandList[ NumHmvpIbcCand − hMvpIdx ] (1124).
8.6.2.5 Processo de Derivação para Vetores de bloco de Croma
[00388] A entrada para este processo é: um vetor de bloco de luma em precisão de amostra fracionária 1/16 bvL.
[00389] A saída deste processo é um vetor de bloco de croma em precisão de amostra fracionária 1/32 bvC.
[00390] Um vetor de bloco de croma é derivado do vetor de bloco de luma correspondente.
[00391] O vetor de bloco de croma bvC é derivado como segue: bvC[ 0 ] = ( ( bvL[ 0 ] >> ( 3 + SubWidthC ) ) * 32 (1125) bvC[ 1 ] = ( ( bvL[ 1 ] >> ( 3 + SubHeightC ) ) * 32 (1126)
8.6.2.6 Processo de Atualização para a lista de candidatos de
Preditor de Vetor de Bloco Baseada em histórico
[00392] As entradas para este processo são: vetor de bloco de luma bvL em precisão de amostra fracionária 1/16.
[00393] A lista de candidatos HmvpIbcCandList é modificada pelas seguintes etapas ordenadas:
[00394] 1. A variável identicalCandExist é ajustada igual a FALSE e a variável removeIdx é ajustada igual a 0.
[00395] 2. Quando NumHmvpIbcCand é maior do que 0, para cada índice hMvpIdx com hMvpIdx = 0..NumHmvpIbcCand − 1, as seguintes etapas se aplicam até que identicalCandExist seja igual a TRUE:
[00396] Quando bvL é igual a HmvpIbcCandList[ hMvpIdx ], identicalCandExist é ajustado igual a TRUE e removeIdx é ajustado igual a hMvpIdx.
[00397] 3. A lista de candidatos HmvpIbcCandList é atualizada como segue:
[00398] Se identicalCandExist for igual a TRUE ou NumHmvpIbcCand for igual a 5, o seguinte se aplica:
[00399] Para cada índice i com i = ( removeIdx + 1 )..( NumHmvpIbcCand − 1 ), HmvpIbcCandList[ i − 1] é ajustado igual a HmvpIbcCandList [ i ]. HmvpIbcCandList[ NumHmvpIbcCand − 1 ] é ajustado igual a bvL.
[00400] De outro modo (identicalCandExist é igual a FALSE e NumHmvpIbcCand é menor do que 5), o seguinte se aplica: HmvpIbcCandList[ NumHmvpIbcCand ++ ] é ajustado igual a bvL.
8. 6.3 Processo de Decodificação para Blocos de IBC
8.6.3.1 Geral
[00401] Este processo é invocado quando decodificando uma unidade de codificação codificada no modo de predição de IBC.
[00402] As entradas para este processo são: uma localização de luma (xCb, yCb) que especifica a amostra superior esquerda do bloco de codificação corrente em relação à amostra de luma superior esquerda da imagem corrente, uma variável cbWidth que especifica a largura do bloco de codificação corrente em amostras de luma, uma variável cbHeight que especifica a altura do bloco de codificação corrente em amostras de luma, o vetor de bloco bv, uma variável cIdx que especifica o índice de componente de cor do bloco corrente.
[00403] As saídas deste processo são: uma rede predSamples de amostras de predição.
[00404] Quando cIdx é igual a 0, para x = xCb..xCb + cbWidth − 1 e y = yCb..yCb + cbHeight − 1, o seguinte se aplica: xVb = ( x + ( bv[ 0 ] >> 4 ) ) & ( IbcBufWidthY − 1 ) (1127) yVb = ( y + ( bv[ 1 ] >> 4 ) ) & ( CtbSizeY − 1 ) (1128) predSamples[ x ][ y ] = ibcVirBuf[ 0 ][ xVb ][ yVb ] (1129) Quando cIdx não é igual a 0, para x = xCb/subWidthC..xCb/subWidthC + cbWidth/subWidthC − 1 e y = yCb/subHeightC..yCb/subHeightC + cbHeight/subHeightC − 1, o seguinte se aplica: xVb = ( x + ( bv[ 0 ] >> 5 ) ) & ( IbcBufWidthC − 1 ) (1130) yVb = ( y + ( bv[ 1 ] >> 5 ) ) & ( ( CtbSizeY/subHeightC ) − 1 ) (1131) predSamples[ x ][ y ] = ibcVirBuf[ cIdx ][ xVb ][ yVb ] (1132) Quando cIdx é igual a 0, as seguintes atribuições são feitas para x =
0..cbWidth − 1 e y = 0..cbHeight − 1: MvL0[ xCb + x ][ yCb + y ] = bv (1133) MvL1[ xCb + x ][ yCb + y ] = 0 (1134) RefIdxL0[ xCb + x ][ yCb + y ] = −1 (1135) RefIdxL1[ xCb + x ][ yCb + y ] = −1 (1136) PredFlagL0[ xCb + x ][ yCb + y ] = 0 (1137)
PredFlagL1[ xCb + x ][ yCb + y ] = 0 (1138) BcwIdx[ xCb + x ][ yCb + y ] = 0 (1139).
[00405] A seguir está uma explicação das aplicações do método de codificação assim como do método de decodificação como mostrado nas modalidades acima mencionadas, e um sistema que os utilizam.
[00406] A Figura 8 é um diagrama de blocos que mostra um sistema de suprimento de conteúdo 3100 para realizar um serviço de distribuição de conteúdo. Este sistema de suprimento de conteúdo 3100 inclui um dispositivo de captura 3102, dispositivo de terminal 3106, e opcionalmente inclui um display 3126. O dispositivo de captura 3102 comunica com o dispositivo de terminal 3106 por uma conexão de comunicação 3104. A conexão de comunicação pode incluir o canal de comunicação 13 acima descrito. A conexão de comunicação 3104 inclui, mas não está limitada a WIFI, Ethernet, Cabo sem fio (3G/4G/5G), USB, ou qualquer tipo de sua combinação, ou similares.
[00407] O dispositivo de captura 3102 gera dados, e pode codificar os dados pelo método de codificação como mostrado nas modalidades acima. Alternativamente, o dispositivo de captura 3102 pode distribuir os dados para um servidor de fluxo (não mostrado nas Figuras), e o servidor codifica os dados e transmite os dados codificados para o dispositivo de terminal 3106. O dispositivo de captura 3102 inclui, mas não está limitado uma câmera, smartphone ou pad, computador ou laptop, sistema de videoconferência, PDA, dispositivo montado em veículo, ou uma combinação de qualquer destes, ou similares. Por exemplo, o dispositivo de captura 3102 pode incluir o dispositivo de fonte 12 como acima descrito. Quando os dados incluem vídeo, o codificador de vídeo 20 incluído no dispositivo de captura 3102 pode realmente executar um processamento de codificação de vídeo. Quando os dados incluem áudio (isto é, voz), um codificador de áudio incluído no dispositivo de captura 3102 pode realmente executar um processamento de codificação de áudio. Para alguns cenários práticos, o dispositivo de captura 3102 distribui os dados de vídeo e áudio codificados multiplexando-os juntos. Para outros cenários práticos, por exemplo, no sistema de videoconferência, os dados de áudio codificados e os dados de vídeo codificados não são multiplexados. O dispositivo de captura 3102 distribui os dados de áudio codificados e os dados de vídeo codificados para o dispositivo do terminal 3106 separadamente.
[00408] No sistema de suprimento de conteúdo 3100, o dispositivo de terminal 310 recebe e reproduz os dados codificados. O dispositivo de terminal 3106 poderia ser um dispositivo com capacidade de recepção e recuperação de dados, tal como um smartphone ou Pad 3108, computador ou laptop 3110, gravador de vídeo de rede (NVR)/gravador de vídeo digital (DVR) 3112, TV 3114 , decodificador (STB) 3116, sistema de videoconferência 3118, sistema de vigilância de vídeo 3120, assistente digital pessoal (PDA) 3122, dispositivo montado em veículo 3124, ou uma combinação de quaisquer um destes, ou similares capazes de decodificar o dados codificados acima mencionados. Por exemplo, o dispositivo de terminal 3106 pode incluir o dispositivo de destino 14 como acima descrito. Quando os dados codificados incluem vídeo, o decodificador de vídeo 30 incluído no dispositivo de terminal é priorizado para executar decodificação de vídeo. Quando os dados codificados incluem áudio, um decodificador de áudio incluído no dispositivo de terminal é priorizado para executar o processamento de decodificação de áudio.
[00409] Para um dispositivo de terminal com seu display, por exemplo, smartphone ou Pad 3108, computador ou laptop 3110, gravador de vídeo de rede (NVR)/gravador de vídeo digital (DVR) 3112, TV 3114, assistente digital pessoal (PDA) 3122, ou o dispositivo montado em veículo 3124, o dispositivo de terminal pode alimentar os dados decodificados para seu display. Para um dispositivo de terminal não equipado com display, por exemplo, STB 3116, sistema de videoconferência 3118, ou sistema de vigilância de vídeo 3120, um display externo 3126 é contactado com este para receber e mostrar os dados decodificados.
[00410] Quando cada dispositivo neste sistema executa codificação ou decodificação, o dispositivo de codificação de imagem ou o dispositivo de decodificação de imagem, como mostrado nas modalidades acima mencionadas, podem ser utilizados.
[00411] A Figura 9 é um diagrama que mostra uma estrutura de um exemplo do dispositivo de terminal 3106. Após o dispositivo de terminal 3106 receber um fluxo do dispositivo de captura 3102, a unidade de procedimento de protocolo 3202 analisa o protocolo de transmissão do fluxo. O protocolo inclui, mas não está limitado a Protocolo de Fluxo em Tempo Real (RTSP), Protocolo de Transferência de Hipertexto (HTTP), protocolo de Fluxo ao Vivo de HTTP (HLS), MPEG-DASH, protocolo de Transporte em Tempo Real (RTP), Protocolo de Mensagem em Tempo Real (RTMP), ou qualquer tipo de sua combinação, ou similares.
[00412] Após a unidade de procedimento de protocolo 3202 processar o fluxo, o arquivo de fluxo é gerado. O arquivo é emitido para uma unidade de demultiplexação 3204. A unidade de demultiplexação 3204 pode separar os dados multiplexados nos dados de áudio codificados e nos dados de vídeo codificados. Como acima descrito, para alguns cenários práticos, por exemplo, no sistema de videoconferência, os dados de áudio codificados e os dados de vídeo codificados não são multiplexados. Nesta situação, os dados codificados são transmitidos para o decodificador de vídeo 3206 e decodificador de áudio 3208 sem atravessar a unidade de demultiplexação 3204.
[00413] Através do processamento de demultiplexação, o fluxo elementar de vídeo (ES), ES de áudio, e opcionalmente legenda são gerados. O decodificador de vídeo 3206, o qual inclui o decodificador de vídeo 30 como explicado nas modalidades acima mencionadas, decodifica o ES de vídeo pelo método de decodificação como mostrado nas modalidades acima mencionadas para gerar um quadro de vídeo e alimenta estes dados para a unidade síncrona 3212. O decodificador de áudio 3208, decodifica o ES de áudio para gerar um quadro de áudio, e alimenta estes dados para a unidade síncrona 3212. Alternativamente, o quadro de vídeo pode ser armazenado em um armazenamento temporário (não mostrado na Figura 9) antes de alimentá-lo para a unidade síncrona 3212. Similarmente, o quadro de áudio pode ser armazenado em um armazenamento temporário (não mostrado na Figura 9) antes de alimentá-lo para a unidade síncrona 3212.
[00414] A unidade síncrona 3212 sincroniza o quadro de vídeo e o quadro de áudio e supre o vídeo/áudio para um display de vídeo/áudio
3214. Por exemplo, a unidade síncrona 3212 sincroniza a apresentação das informações de vídeo e áudio. As informações podem codificar na sintaxe que utiliza estampas de tempo referentes à apresentação de dados audiovisuais codificados e estampas de tempo referente ao fornecimento do próprio fluxo de dados.
[00415] Se uma legenda estiver incluída no fluxo, o decodificador de legenda 3210 decodifica a legenda, e a sincroniza com o quadro de vídeo e o quadro de áudio, e supre o vídeo/áudio/legenda para um display de vídeo/áudio/legenda 3216.
[00416] A presente invenção não está limita ao sistema acima mencionado, e ou o dispositivo de codificação de imagem ou o dispositivo de decodificação de imagem nas modalidades acima mencionadas podem ser incorporados em outro sistema, por exemplo, um sistema de carro.
[00417] Exemplo 1. Um método de construir uma lista de mesclagens candidata para modo de cópia de intrabloco, IBC, o método compreendendo: inserir um vetor do bloco de um bloco vizinho esquerdo de um bloco corrente em uma lista de mesclagens inicial do bloco corrente (em um exemplo, a lista de mesclagens inicial é uma lista vazia antes desta etapa de inserção), quando o bloco vizinho esquerdo está disponível e o bloco vizinho esquerdo está utilizando o modo de IBC; inserir um vetor do bloco do bloco vizinho superior do bloco corrente na lista de mesclagens inicial (em um exemplo, a lista de mesclagens inicial é uma lista vazia antes desta etapa, ou a lista de mesclagens inicial compreende um vetor de bloco de um bloco vizinho esquerdo de um bloco corrente), quando o bloco vizinho superior está disponível, o bloco vizinho superior está utilizando o modo de IBC e o vetor de bloco do bloco vizinho superior não é o mesmo que o vetor de bloco do bloco vizinho esquerdo; inserir um vetor de bloco do bloco vizinho superior direito do bloco corrente na lista de mesclagens inicial (em um exemplo, a lista de mesclagens inicial é uma lista vazia antes desta etapa, ou a lista de mesclagens inicial compreende um vetor de bloco de um bloco vizinho superior de um bloco corrente, ou a lista de mesclagens inicial compreende um vetor de bloco de um bloco vizinho esquerdo de um bloco corrente, ou a lista de mesclagens inicial compreende um vetor de bloco de um bloco vizinho superior de um bloco corrente e um vetor de bloco de um bloco vizinho esquerdo de um bloco corrente), quando o bloco vizinho superior direito está disponível e o bloco vizinho superior direito está utilizando o modo de IBC.
[00418] Exemplo 2. O método do exemplo 1, em que o método ainda compreende: inserir um vetor de bloco do bloco vizinho inferior esquerdo do bloco corrente na lista de mesclagens inicial (em um exemplo, a lista de mesclagens inicial é uma lista vazia antes desta etapa, ou a lista de mesclagens inicial compreende um vetor de bloco de um bloco vizinho superior de um bloco corrente, ou a lista de mesclagens inicial compreende um vetor de bloco de um bloco vizinho esquerdo de um bloco corrente, ou a lista de mesclagens inicial compreende um vetor de bloco de um bloco vizinho superior de um bloco corrente e um vetor do bloco de um bloco vizinho esquerdo de um bloco corrente, ou a lista de mesclagens inicial compreende um vetor de bloco de um bloco vizinho superior de um bloco corrente, um vetor de bloco de um bloco vizinho esquerdo de um bloco corrente e um vetor do bloco de um bloco vizinho superior direito), quando o bloco vizinho inferior esquerdo está disponível e o bloco vizinho inferior esquerdo está utilizando o modo de IBC.
[00419] Exemplo 3. O método do exemplo 1 ou 2, em que o método ainda compreende: inserir um vetor de bloco do bloco vizinho superior esquerdo do bloco corrente na lista de mesclagens inicial (em um exemplo, a lista de mesclagens inicial é uma lista vazia antes desta etapa, ou a lista de mesclagens inicial compreende um vetor de bloco de um bloco vizinho superior de um bloco corrente, ou a lista de mesclagens inicial compreende um vetor de bloco de um bloco vizinho esquerdo de um bloco corrente, ou a lista de mesclagens inicial compreende um vetor de bloco de um bloco vizinho superior de um bloco corrente e um vetor de bloco de um bloco vizinho esquerdo de um bloco corrente, ou a lista de mesclagens inicial compreende um vetor de bloco de um bloco vizinho superior de um bloco corrente, um vetor de bloco de um bloco vizinho esquerdo de um bloco corrente e um vetor de bloco de um bloco vizinho superior direito, ou a lista de mesclagens inicial compreende um vetor de bloco de um bloco vizinho superior de um bloco corrente, um vetor de bloco de um bloco vizinho esquerdo de um bloco corrente, um vetor de bloco de um bloco vizinho superior direito e um vetor de bloco de um bloco vizinho inferior esquerdo), quando o bloco vizinho superior esquerdo está disponível, o bloco vizinho superior esquerdo está utilizando o modo de IBC e um número de vetores de bloco na lista de mesclagens inicial é menor do que um limite (por exemplo, o limite é 4).
[00420] Exemplo 4. Um codificador 20 que compreende um circuito de processamento para executar o método de acordo com qualquer um dos exemplos 1 a 3.
[00421] Exemplo 5. Um decodificador 30 que compreende um circuito de processamento para executar o método de acordo com qualquer um dos exemplos 1 a 3.
[00422] Exemplo 6. Um produto de programa de computador que compreende um código de programa para executar o método de acordo com qualquer um dos exemplos 1 a 3.
[00423] Exemplo 7. Um decodificador ou um codificador, que compreendem: um ou mais processadores; e um meio de armazenamento legível por computador não transitório acoplado nos processadores e que armazena uma programação para execução pelos processadores, em que a programação, quando executada pelos processadores, configura o decodificador para executar o método de acordo com qualquer um dos exemplos 1 a 3. Operadores Matemáticos
[00424] Os operadores matemáticos utilizados neste pedido são similares àqueles utilizados na linguagem de programação C. No entanto, os resultados de divisão de inteiros e operações de deslocamento aritmético são definidos mais precisamente, e operações adicionais são definidas, tais como exponenciação e divisão de valor real. As convenções de numeração e contagem geralmente começam de 0, por exemplo, "o primeiro" é equivalente ao 0-th, "o segundo" é equivalente ao 1-th, etc. Operadores Aritméticos
[00425] Os seguintes operadores aritméticos são definidos como segue: + Adição Subtração (como um operador de dois argumentos) ou negação − (como um operador de prefixo unário) * Multiplicação, incluindo multiplicação de matriz Exponenciação. Especifica x à potência de y. Em outros contextos, tal xy notação é utilizada para sobrescrever não destinada para interpretação como exponenciação. Divisão de inteiros com truncamento do resultado na direção de zero. / Por exemplo, 7/4 e −7/−4 são truncados para 1 e −7/4 e 7/−4 são truncados para −1. Utilizado para denotar divisão em equações matemáticas onde ÷ nenhum truncamento ou arredondamento é pretendido. x Utilizado para denotar divisão em equações matemáticas onde y nenhum truncamento ou arredondamento é pretendido. y O somatório de f( i ) com i assumindo todos os valores inteiros de x ෍ f( i ) até e incluindo y. i=x Módulo. Restante de x dividido por y, definido somente para inteiros x x%y e y com x >= 0 e y > 0.
Operadores Lógicos
[00426] Os seguintes operadores lógicos são definidos como segue: x && y Booleano lógico "e" de x e y x||y Booleano lógico "ou" de x e y ! Booleano lógico "não" x?y:z Se x é TRUE ou não igual a 0, avalia para o valor de y; de outro modo, avalia para o valor de z. Operadores Relacionais
[00427] Os seguintes operadores relacionais são definidos como segue:
> Maior do que >= Maior do que ou igual a < Menor do que <= Menor do que ou igual a = = Igual a != Não igual a
[00428] Quando um operador relacional é aplicado a um elemento de sintaxe ou variável ao qual foi atribuído o valor "na" (não aplicável), o valor "na" é tratado como um valor distinto para o elemento de sintaxe ou variável. O valor "na" é considerado não ser igual a nenhum outro valor. Operadores de Lógica Binária
[00429] Os seguintes operadores de lógica binária são definidos como segue: & Lógica binária "e". Quando operando em argumentos inteiros, opera em uma representação de complemento de dois do valor inteiro. Quando operando em um argumento binário que contém menos bits do que outro argumento, o argumento mais curto é estendido adicionando bits mais significativos iguais a 0. | Lógica binária "ou". Quando operando em argumentos inteiros, opera em uma representação de complemento de dois do valor inteiro. Quando operando em um argumento binário que contém menos bits do que outro argumento, o argumento mais curto é estendido adicionando bits mais significativos iguais a 0. ^ Lógica binária "ou exclusivo". Quando operando em argumentos inteiros, opera em uma representação de complemento de dois do valor inteiro. Quando operando em um argumento binário que contém menos bits do que outro argumento, o argumento mais curto é estendido adicionando bits mais significativos iguais a 0. x >> y Deslocamento aritmético para a direita de uma representação inteira de complemento de dois de x por y dígitos binários. Esta função é definida somente para valores inteiros não negativos de y. Os bits deslocados para os bits mais significativos (MSBs) como resultado do deslocamento para a direita têm um valor igual ao MSB de x antes da operação de deslocamento. x << y Deslocamento aritmético para a esquerda de uma representação inteira de complemento de dois de x por y dígitos binários. Esta função é definida somente para valores inteiros não negativos de y. Os bits deslocados para os bits menos significativos (LSBs) como um resultado do deslocamento para a esquerda têm um valor igual a 0. Operadores de Atribuição
[00430] Os seguintes operadores de aritméticos são definidos como segue: = Operador de atribuição ++ Incremento, isto é, x+ + é equivalente a x = x + 1; quando utilizado em um índice de rede, avalia para o valor da variável antes da operação de incremento. −− Decremento, isto é, x− − é equivalente a x = x − 1; quando utilizado em um índice de rede, avalia para o valor da variável antes da operação de decremento. += Incremento por uma quantidade especificada, isto é, x += 3 é equivalente a x = x + 3, e x += (−3) é equivalente a x = x + (−3). −= Decremento por uma quantidade especificada, isto é, x −= 3 é equivalente a x = x − 3, e x −= (−3) é equivalente a x = x − (−3). Notação de Faixa
[00431] A seguinte notação é utilizada para especificar uma faixa de valores: x = y..z x não assumem valores inteiros começando de y a z, inclusive, com x, y, e z sendo números inteiros e z sendo maior do que y. Funções Matemáticas
[00432] As seguintes funções matemáticas são definidas: x ; x>=0 Abs( x ) = ൜ െx ; x<0 Asin( x ) a função de seno inversa trigonométrica, operando em um argumento x que está na faixa de −1.0 a 1.0, inclusive, com um valor de saída na faixa de −π÷2 a π÷2, inclusive, em unidades de radianos Atan( x ) a função de tangente inversa trigonométrica, operando em um argumento x, com um valor de saída na faixa de −π÷2 a π÷2, inclusive, em unidades de radianos y ‫ ۓ‬Atan ቀxቁ ; x>0 ۖ y ۖ Atan ቀxቁ ൅ π ; x<0&&y>=0 Atan2( y, x ) = Atan ቀyቁ െ Ɏ ; x<0&&y<0 ‫۔‬ x π ۖ ൅ ; x==0&&y>=0 ۖ 2 π െ ; deoutromodo ‫ە‬ 2 Ceil( x ) o menor inteiro maior do que ou igual a x. Clip1Y( x ) = Clip3( 0, ( 1 << BitDepthY ) − 1, x ) Clip1C( x ) = Clip3( 0, ( 1 << BitDepthC ) − 1, x ) x ; z<x Clip3( x, y, z ) = ൝y ; z>y z ; deoutromodo Cos( x ) a função de cosseno trigonométrica que opera em um argumento x em unidades de radiano. Floor( x ) o maior inteiro menor do que ou igual a x. c൅d ; b െ a>=d/2 GetCurrMsb( a, b, c, d ) = ൝c െ d ; a െ b>d/2 c ; deoutromodo Ln( x ) o logaritmo natural de x (o logaritmo de base e, onde e é a constante de base de logaritmo natural 2.718 281 828...). Log2( x ) o logaritmo de base 2 de x.
Log10( x ) o logaritmo de base 10 de x. x ; x<=y Min( x, y ) = ቄy ; x>y x ; x>=y Max( x, y ) = ቄy ; x<y Round( x ) = Sign( x ) * Floor( Abs( x ) + 0.5 ) 1 ; x>0 Sign( x ) = ൝ 0 ; x==0 െ1 ; x<0 Sin( x ) a função de seno trigonométrica que opera em um argumento x em unidades de radiano Sqrt( x ) = ξx Swap( x, y ) = ( y, x ) Tan( x ) a função de tangente trigonométrica que opera em um argumento x em unidades de radiano Ordem de Precedência de Operação
[00433] Quando uma ordem de precedência em uma expressão não é indicada explicitamente pela utilização de parênteses, as seguintes regras se aplicam: - As operações de uma precedência mais alta são avaliadas antes de qualquer operação de uma precedência mais baixa. - As operações da mesma precedência são avaliadas sequencialmente da esquerda para a direita.
[00434] A tabela abaixo especifica a precedência de operações de mais alta para mais baixa; uma posição mais alta na tabela indica uma precedência mais alta.
[00435] Para aqueles operadores que são também utilizados na linguagem de programação C, a ordem de precedência utilizada nesta Especificação é a mesma que utilizada na linguagem de programação C. Tabela: Precedência de Operação de Mais Alta (no Topo da Tabela) Para Mais Baixa (no Fundo da Tabela)
operações (com operandos x, y, e z) "x++", "x− −" "!x", "−x" (como um operador de prefixo unário) xy x "x * y", "x / y", "x ÷ y", "y", "x % y" y "x + y", "x − y" (como operador de dois argumentos), " å f( i ) " i=x "x << y", "x >> y" "x < y", "x <= y", "x > y", "x >= y" "x = = y", "x != y" "x & y" "x | y" "x && y" "x | | y" "x ? y : z" "x..y" "x = y", "x += y", "x −= y" Descrição de Texto de Operações Lógicas
[00436] No texto, uma declaração de operações lógicas como seria descrita matematicamente na seguinte forma: if( condition 0 ) statement 0 else if( condition 1 ) statement 1 ... else /* informative remark on remaining condition */ statement n pode ser descrito no seguinte modo: ... as follows/... the following applies: – If condition 0, statement 0
– Otherwise, if condition 1, statement 1 – ... – De outro modo (observação informativa sobre condição restante), statement n
[00437] Cada declaração "If ... Otherwise, if ... Otherwise, ..." no texto é introduzido com "... as follows " or "... the following applies" imediatamente seguido por "If ... ". A última condição do "If ... Otherwise, if ... Otherwise, ..." é sempre um "Otherwise, ...". Declarações intercaladas "If ... Otherwise, if ... Otherwise, ..." podem ser identificadas coincidindo "... as follows" or "... the following applies" com o final "Otherwise, ...".
[00438] No texto, uma declaração de operações lógicas como seria descrita matematicamente na seguinte forma: if( condition 0a && condition 0b ) statement 0 else if( condition 1a | | condition 1b ) statement 1 ... else statement n pode ser descrito no seguinte modo: ... as follows/... the following applies: – Se todas as condições seguintes forem verdadeiras, statement 0: – condition 0a – condition 0b – De outro modo, se uma ou mais das seguintes condições forem verdadeiras, statement 1: – condition 1a – condition 1b
– ... – Otherwise, statement n
[00439] No texto, uma declaração de operações lógicas como seria descrita matematicamente na seguinte forma: if( condition 0 ) statement 0 if( condition 1 ) statement 1 pode ser descrita no seguinte modo: When condition 0, statement 0 When condition 1, statement 1.
[00440] Apesar das modalidades da invenção terem sido primariamente descritas com base em codificação de vídeo, deve ser notado que as modalidades do sistema de codificação 10, codificador 20 e decodificador 30 (e correspondentemente o sistema 10) e as outras modalidades aqui descritas podem também ser configuradas para processamento ou codificação de imagem estática, isto é, o processamento ou codificação de uma imagem individual independente de qualquer imagem precedente ou consecutiva como em codificação de vídeo. Em geral somente unidades de interpredição 244 (codificador) e 344 (decodificador) podem não ser disponíveis no caso da codificação de processamento de imagem ser limitada a uma única imagem 17. Todas as outras funcionalidades (também referidas como ferramentas ou tecnologias) do codificador de vídeo 20 e decodificador de vídeo 30 podem igualmente ser utilizadas para processamento de imagem estática, por exemplo, cálculo residual 204/304, transformada 206, quantização 208, quantização inversa 210/310, transformada (inversa) 212/312, particionamento 262/362, intrapredição 254/354, e/ou filtragem de loop 220, 320, e codificação de entropia 270 e decodificação de entropia 304.
[00441] As modalidades, por exemplo, do codificador 20 e do decodificador 30, e as funções aqui descritas, por exemplo, com referência ao codificador 20 e ao decodificador 30, podem ser implementadas em hardware, software, firmware, ou qualquer sua combinação. Se implementadas em software, as funções podem ser armazenadas em um meio legível por computador ou transmitidas sobre um meio de comunicação como uma ou mais instruções ou códigos e executadas por uma unidade de processamento baseada em hardware. O meio legível por computador pode incluir um meio de armazenamento legível por computador, o qual corresponde a um meio tangível tal como um meio de armazenamento de dados, ou meio de comunicação, que inclui qualquer meio que facilite a transferência de um programa de computador de um local para outro, por exemplo, de acordo com um protocolo de comunicação. Neste modo, o meio legível por computador geralmente pode corresponder a (1) meio armazenamento legível por computador tangível o qual é não é transitória ou (2) um meio de comunicação tal como um sinal ou onda portadora. O meio de armazenamento de dados pode ser qualquer meio disponível que possa ser acessado por um ou mais computadores ou um ou mais processadores para recuperar instruções, códigos e/ou estruturas de dados para implementação das técnicas descritas nesta descrição. Um produto de programa de computador pode incluir um meio legível por computador.
[00442] Por meio de exemplo, e não limitante, tal meio de armazenamento legível por computador pode compreender uma RAM, ROM, EEPROM, CD-ROM ou outro armazenamento de disco ótico, armazenamento de disco magnético, ou outros dispositivos de armazenamento magnético, memória instantânea, ou qualquer outro meio que possa ser utilizado para armazenar um código de programa desejado na forma de instruções ou estruturas de dados e que pode ser acessado por um computador. Também, qualquer conexão é apropriadamente denominada um meio legível por computador. Por exemplo, se instruções forem transmitidas de um website, servidor, ou outra fonte remota utilizando um cabo coaxial, cabo de fibra ótica, par trançado, linha de assinante digital (DSL), ou tecnologias sem fio tal como infravermelho, rádio, e microondas, então o cabo coaxial, cabo de fibra ótica, par trançado, DSL ou tecnologias sem fio tal como infravermelho, rádio e microondas são incluídos na definição de meio. Deve ser compreendido, no entanto, que o meio de armazenamento legível por computador e meio de armazenamento de dados não incluem conexões, ondas portadoras, sinais ou outros meios transitórios, mas são ao invés direcionados a um meio de armazenamento tangível, não transitória. Um disco e disco, como aqui utilizado, inclui disco compacto (CD), disco laser, disco ótico, disco versátil digital (DVD), disco flexível e disco Blu-ray, onde discos usualmente reproduzem dados magneticamente, enquanto que discos reproduzem dados oticamente com lasers. Combinações dos acima devem também ser incluídas dentro do escopo de meio legível por computador.
[00443] As instruções podem ser executadas por um ou mais processadores, tal como um ou mais processadores de sinal digital (DSPs), microprocessadores de uso geral, circuitos integrados de aplicação específica (ASICs), redes lógicas programáveis no campo (FPGAs), ou outro circuito lógico equivalente integrado ou discreto. Consequentemente, o termo "processador", como aqui utilizado pode referir a qualquer uma das estruturas acima ou qualquer outra estrutura adequada para implementação das técnicas aqui descritas. Além disso, em alguns aspectos, a funcionalidade aqui descrita pode ser provida dentro de hardware dedicado e/ou módulos de software configurados para codificar e decodificar, ou incorporados em um codec combinado.
Também, as técnicas poderiam ser totalmente implementadas em um ou mais circuitos ou elementos lógicos.
[00444] As técnicas desta descrição podem ser implementadas em uma ampla variedade de dispositivos ou aparelhos, incluindo um telefone sem fio, um circuito integrado (IC) ou um conjunto de ICs (por exemplo, um conjunto de chips). Vários componentes, módulos, ou unidades estão descritos nesta descrição para enfatizar os aspectos funcionais de dispositivos configurados para executar as técnicas descritas, mas não necessariamente requerem a realização por diferentes unidades de hardware. Ao invés, como acima descrito, várias unidades podem ser combinadas em uma unidade de hardware de codec ou providas por uma coleção de unidades de hardware interoperativas, incluindo um ou mais processadores como acima descrito, em conjunto com um software e/ou firmware adequado.

Claims (16)

REIVINDICAÇÕES
1. Método de construir uma lista de mesclagens candidata para modo de cópia de intrabloco, IBC, caracterizado pelo fato de que compreende: inserir um vetor de bloco de um bloco vizinho esquerdo de um bloco corrente em uma lista de mesclagens inicial do bloco corrente, quando o bloco vizinho esquerdo está disponível e o bloco vizinho esquerdo está utilizando o modo de IBC; inserir um vetor de bloco de um bloco vizinho superior do bloco corrente na lista de mesclagens inicial, quando o bloco vizinho superior está disponível, o bloco vizinho superior está utilizando o modo de IBC e o vetor de bloco do bloco vizinho superior não for o mesmo que o vetor de bloco do bloco vizinho esquerdo; inserir um vetor de bloco do último candidato em um preditor de vetor de movimento baseado em histórico, HMVP na lista de mesclagens inicial, quando o vetor de bloco do bloco vizinho superior não for o mesmo que o vetor de bloco do último candidato no HMVP e quando o vetor de bloco do bloco vizinho esquerdo não for o mesmo que o vetor de bloco do último candidato no HMVP.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que ainda compreende: obter um vetor de bloco do bloco corrente de acordo com a lista de mesclagens inicial após os processos de inserção acima e um índice de candidato de mesclagem para o bloco corrente.
3. Método de construir uma lista de mesclagens candidata para modo de cópia de intrabloco, IBC, caracterizado pelo fato de que compreende: inserir um vetor de bloco de um bloco vizinho de um bloco corrente em uma lista de mesclagens inicial do bloco corrente, quando o bloco vizinho está disponível e o bloco vizinho está utilizando o modo de IBC; inserir um vetor de bloco do último candidato em um preditor de vetor de movimento baseado em histórico, HMVP na lista de mesclagens inicial, quando o vetor de bloco do bloco vizinho não for o mesmo que o vetor de bloco do último candidato no HMVP; inserir um vetor de bloco de outro candidato no HMVP na lista de mesclagens inicial, em que a poda para o vetor de bloco de outro candidato no HMVP é removida.
4. Método, de acordo com a reivindicação 3, caracterizado pelo fato de que ainda compreende: obter um vetor de bloco do bloco corrente de acordo com a lista de mesclagens inicial após os processos de inserção acima e um índice de candidato de mesclagem para o bloco corrente.
5. Método de construir uma lista de mesclagens candidata para modo de cópia de intrabloco, IBC, caracterizado pelo fato de que compreende: inserir um vetor de bloco de um bloco vizinho esquerdo de um bloco corrente em uma lista de mesclagens inicial do bloco corrente, quando o bloco vizinho esquerdo está disponível e o bloco vizinho esquerdo está utilizando o modo de IBC; inserir um vetor de bloco de um bloco vizinho superior do bloco corrente na lista de mesclagens inicial, quando o bloco vizinho superior está disponível, o bloco vizinho superior está utilizando o modo de IBC e o vetor de bloco do bloco vizinho superior não for o mesmo que o vetor de bloco do bloco vizinho esquerdo; inserir um vetor de bloco do último candidato em um preditor de vetor de movimento baseado em histórico, HMVP na lista de mesclagens inicial, quando o vetor de bloco do bloco vizinho superior não for o mesmo que o vetor de bloco do último candidato no HMVP e quando o vetor de bloco do bloco vizinho esquerdo não for o mesmo que o vetor de bloco do último candidato no HMVP; inserir um vetor de bloco de outro candidato no HMVP na lista de mesclagens inicial, em que a poda para o vetor de bloco de outro candidato no HMVP é removida.
6. Método, de acordo com a reivindicação 5, caracterizado pelo fato de que ainda compreende: obter um vetor de bloco do bloco corrente de acordo com a lista de mesclagens inicial após os processos de inserção acima e um índice de candidato de mesclagem para o bloco corrente.
7. Método, de acordo com a reivindicação 5 ou 6, caracterizado pelo fato de que a lista de mesclagens inicial é uma lista vazia antes do primeiro processo de inserção.
8. Método, de acordo com qualquer uma das reivindicações 5 a 7, caracterizado pelo fato de que os processos de inserção acima são executados ordenadamente.
9. Método de construir uma lista de mesclagens candidata para modo de cópia de intrabloco, IBC, caracterizado pelo fato de que compreende: inserir um vetor de bloco de um bloco vizinho de um bloco corrente em uma lista de mesclagens inicial do bloco corrente, quando o bloco vizinho está disponível e o bloco vizinho está utilizando o modo de IBC; inserir um vetor de bloco de candidato em um preditor de vetor de movimento baseado em histórico, HMVP na lista de mesclagens inicial, quando o vetor de bloco do bloco vizinho não for o mesmo que o vetor de bloco do último candidato no HMVP; em que o último vetor de bloco na lista de mesclagens inicial do bloco corrente é um vetor de bloco de um candidato no HMVP.
10. Método, de acordo com a reivindicação 9, caracterizado pelo fato de que ainda compreende:
obter um vetor de bloco do bloco corrente de acordo com a lista de mesclagens inicial após os processos de inserção acima e um índice de candidato de mesclagem para o bloco corrente.
11. Método de construir uma lista de mesclagens candidata para modo de cópia de intrabloco, IBC, caracterizado pelo fato de que compreende: inserir um vetor de bloco de um bloco vizinho esquerdo de um bloco corrente em uma lista de mesclagens inicial do bloco corrente, quando o bloco vizinho esquerdo está disponível e o bloco vizinho esquerdo está utilizando o modo de IBC; inserir um vetor de bloco de um bloco vizinho superior do bloco corrente na lista de mesclagens inicial, quando o bloco vizinho superior está disponível, o bloco vizinho superior está utilizando o modo de IBC e o vetor de bloco do bloco vizinho superior não for o mesmo que o vetor de bloco do bloco vizinho esquerdo; inserir um vetor de bloco de último candidato em um preditor de vetor de movimento baseado em histórico, HMVP na lista de mesclagens inicial, quando o vetor de bloco do bloco vizinho superior não for o mesmo que o vetor de bloco do último candidato no HMVP e quando o vetor de bloco do bloco vizinho esquerdo não for o mesmo que o vetor de bloco do último candidato no HMVP; inserir um vetor de bloco de outro candidato no HMVP na lista de mesclagens inicial, em que a poda para o vetor de bloco de outro candidato no HMVP é removida, e em que o último vetor de bloco na lista de mesclagens inicial do bloco corrente é o vetor de bloco do outro candidato no HMVP.
12. Codificador (20), caracterizado pelo fato de que compreende um circuito de processamento para executar o método como definido em qualquer uma das reivindicações 1 a 11.
13. Decodificador (30), caracterizado pelo fato de que compreende um circuito de processamento para executar o método como definido em qualquer uma das reivindicações 1 a 11.
14. Produto de programa de computador, caracterizado pelo fato de que compreende um código de programa para executar o método como definido em qualquer uma das reivindicações 1 a 11.
15. Decodificador, caracterizado pelo fato de que compreende: um ou mais processadores; e um meio de armazenamento legível por computador não transitório acoplado nos processadores e armazenando uma programação para execução pelos processadores, em que a programação, quando executada pelos processadores, configura o decodificador para executar o método como definido em qualquer uma das reivindicações 1 a 11.
16. Dispositivo de decodificação de dados de vídeo, caracterizado pelo fato de que compreende: um armazenamento de memória não transitório, configurado para armazenar dados de vídeo em uma forma de fluxo de bits; e um decodificador de vídeo configurado para executar o método como definido em qualquer uma das reivindicações 1 a 11.
DISPOSITIVO DE FONTE DISPOSITIVO DE DESTINO
FONTE DE IMAGEM DISPOSITIVO DE DISPLAY Petição 870210046174, de 21/05/2021, pág. 271/291
DADOS DE IMAGEM
DADOS DE IMAGEM PÓS-
PROCESSADOS
PROCESSADOR PÓS-PROCESSADOR
DADOS DE IMAGEM PRÉ-PROCESSADOS DADOS DE IMAGEM 1/10
DECODIFICADOS
CODIFICADOR DECODIFICADOR
DADOS DE IMAGEM DADOS DE IMAGEM
CODIFICADOS CANAL DE CODIFICADOS
COMUNICAÇÃO
INTERFACE DE INTERFACE DE
COMUNICAÇÃO COMUNICAÇÃO
DISPOSITIVO(S) DE IMAGEM ANTENA Petição 870210046174, de 21/05/2021, pág. 272/291
CIRCUITO DE PROCESSAMENTO
CODIFICADOR DE VÍDEO DECODIFICADOR DE VÍDEO 2/10 PROCESSADOR(ES)
DISPOSITIVO DE DISPLAY ARMAZENAMENTO(S)
DE MEMÓRIA
SISTEMA DE CODIFICAÇÃO DE VÍDEO
IMAGEM
BLOCO DE IMAGEM BLOCO RESIDUAL
UNIDADE DE CÁLCULO RESIDUAL Petição 870210046174, de 21/05/2021, pág. 273/291
BLOCO DE PREDIÇÃO
ENTRADA
UNIDADE DE
UNIDADE DE SELEÇÃO DE MODO PROCESSAMENTO COEFICIENTES
DE TRANSFORMADA DE TRANSFORMADA
UNIDADE DE
UNIDADE DE QUANTIZAÇÃO INTERPRE- SAÍDA
DIÇÃO COEFICIENTES
UNIDADE DE QUANTIZADOS PARTICIONA- UNIDADE DE 3/10
MENTO CODIFICAÇÃO
UNIDADE DE DE ENTROPIA DADOS DE INTERPRE- IMAGEM
ELEMENTOS DE CODIFICADOS
DIÇÃO UNIDADE DE
SINTAXE
QUANTIZAÇÃO
INVERSA COEFICIENTES IMAGEM DESQUANTI-
DECODIFICADA ZADOS UNIDADE DE PROCE-
SSAMENTO DE ARMAZENA- TRANSFORMADA INVERSA
MENTO FILTRO
TEMPORÁRIO DE
DE IMAGEM BLOCO RESIDUAL
DECODIFICADA LOOP
RECONSTRUÍDO
UNIDADE DE
RECONSTRUÇÃO
CODIFICADOR BLOCO FILTRADO BLOCO RECONSTRUÍDO
DADOS DE
IMAGEM
CODIFICADOS
UNIDADE DE
DECODIFICAÇÃO
DE ENTROPIA Petição 870210046174, de 21/05/2021, pág. 274/291
ELEMENTOS DE SINTAXE
UNIDADE DE
APLICAÇÃO COEFICIENTES
DE MODO QUANTIZADOS
UNIDADE DE INTERPRE-
IMAGEM DIÇÃO
DECODIFICADA
BLOCO DE
PREDIÇÃO 4/10
UNIDADE DE INTERPRE-
DIÇÃO
UNIDADE DE
QUANTIZAÇÃO
INVERSA COEFICIENTES
DESQUANTIZADOS UNIDADE DE PROCESSA-
MENTO DE TRANSFORMA ARMAZENA- DA INVERSA
MENTO FILTRO
TEMPORÁRIO DE
DE IMAGEM BLOCO RESIDUAL DECODIFI- LOOP UNIDADE DE RECONSTRUÍDO
IMAGEM CADA RECONSTRUÇÃO DECODI-
FICADA
BLOCO FILTRADO BLOCO RECONSTRUÍDO DECODIFICADOR
SAÍDA
DISPOSITIVO DE CODIFICAÇÃO DE VÍDEO Petição 870210046174, de 21/05/2021, pág. 275/291
PROCESSADOR
MÓDULO DE
CODIFICAÇÃO 5/10
MEMÓRIA
PORTAS A JUSANTE
PORTAS A MONTANTE
Petição 870210046174, de 21/05/2021, pág. 276/291
PROCESSADOR
DADOS 6/10
APLICAÇÃO APLICAÇÃO: CODIFICAÇÃO DE VÍDEO
APLICAÇÃO
SISTEMA DE OPERAÇÃO
BLOCO CORRENTE BLOCO CO-LOCALIZADO
DISPONÍVEL? DISPONÍVEL?
SIM SIM Petição 870210046174, de 21/05/2021, pág. 278/291
PRIMEIRO MV PRIMEIRO MV NÃO
NÃO ESCALADO NÃO
NÃO ESCALADO ENCONTRADO
ENCONTRADO ENCONTRADO ENCONTRADO
ENCONTRAR MV ENCONTRAR MV
NÃO ESCALADO NÃO ESCALADO NÃO SIM NÃO A0 OU A1 A0 OU A1 DISPONÍVEL? DISPONÍVEL?
ENCONTRAR MV ESCALADO COM TANTO CUR.REF PIC E REF PIC SENDO REF
PICS DE CURTO PRAZO 8/10
PRIMEIRO MV ENCONTRAR MV NÃO ENCONTRAR MV NÃO
ESCALADO ESCALADO OU MV ESCALADO ESCALADO OU MV ESCALADO ENCONTRADO COM TANTO CUR.REF PIC E COM TANTO CUR.REF PIC E
REF PIC SENDO REF PICS DE REF PIC SENDO REF PICS DE
CURTO PRAZO CURTO PRAZO
PRIMEIRO MV NÃO PRIMEIRO MV NÃO
ESCALADO OU ESCALADO OU
ESCALADO ESCALADO
ENCONTRADO ENCONTRADO
DISPOSITIVO DE TERMINAL Petição 870210046174, de 21/05/2021, pág. 279/291 COMPUTADOR / LAPTOP
DISPOSITIVO DECODIFICADOR (STB)
DE CAPTURA SISTEMA DE VIDEOCONFE- 9/10
RÊNCIA
SISTEMA DE VIGILÂNCIA
DE VÍDEO
DISPOSITIVO MONTADO
EM VEÍCULO
Petição 870210046174, de 21/05/2021, pág. 280/291
QUADRO
VÍDEO ES DE VÍDEO
DECODIFICADOR DE VÍDEO
DISPLAY DE UNIDADE VÍDEO / ÁUDIO
SÍNCRONA
QUADRO
UNIDADE DE
FLUXO UNIDADE DE DE ÁUDIO PROCEDI- ARQUIVO ÁUDIO ES DECODIFICADOR DE ÁUDIO
MENTO DE DEMULTIPLEXAÇÃO
PROTOCOLO
DISPLAY DE
LEGENDAS 10/10 DECODIFICADOR VÍDEO / ÁUDIO /
DE LEGENDAS LEGENDAS
BR112021009922-0A 2019-03-04 2020-02-10 Método de construir uma lista de mesclagens candidata para modo de cópia de intrabloco, codificador, decodificador, produto de programa de computador e dispositivo de decodificação de dados de vídeo BR112021009922A2 (pt)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201962813690P 2019-03-04 2019-03-04
US62/813,690 2019-03-04
US201962815311P 2019-03-07 2019-03-07
US62/815,311 2019-03-07
PCT/CN2020/074575 WO2020177505A1 (en) 2019-03-04 2020-02-10 An encoder, a decoder and corresponding methods using ibc merge list

Publications (1)

Publication Number Publication Date
BR112021009922A2 true BR112021009922A2 (pt) 2021-09-28

Family

ID=72337440

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112021009922-0A BR112021009922A2 (pt) 2019-03-04 2020-02-10 Método de construir uma lista de mesclagens candidata para modo de cópia de intrabloco, codificador, decodificador, produto de programa de computador e dispositivo de decodificação de dados de vídeo

Country Status (10)

Country Link
US (2) US11546626B2 (pt)
EP (1) EP3878181A4 (pt)
JP (1) JP7477066B2 (pt)
KR (1) KR20210088688A (pt)
CN (2) CN112889290A (pt)
AU (2) AU2020233003B2 (pt)
BR (1) BR112021009922A2 (pt)
CA (1) CA3120795A1 (pt)
MX (1) MX2021008402A (pt)
WO (1) WO2020177505A1 (pt)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11153563B2 (en) * 2019-03-12 2021-10-19 Qualcomm Incorporated Combined in-loop filters for video coding
CN113924779A (zh) * 2019-06-20 2022-01-11 韩国电子通信研究院 视频编码/解码方法和装置以及比特流存储介质
CN113423004B (zh) * 2021-08-23 2021-11-30 杭州一知智能科技有限公司 基于解耦译码的视频字幕生成方法和系统
US20230075788A1 (en) * 2021-09-01 2023-03-09 Tencent America LLC Template matching on ibc merge candidates

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9756354B2 (en) * 2014-03-17 2017-09-05 Qualcomm Incorporated Block vector predictor for intra block copying
CN108632629B9 (zh) * 2014-03-19 2021-06-15 株式会社Kt 针对多视图视频信号生成合并候选列表的方法及解码装置
WO2015180014A1 (en) * 2014-05-26 2015-12-03 Mediatek Singapore Pte. Ltd. An improved merge candidate list construction method for intra block copy
US10027981B2 (en) * 2014-09-01 2018-07-17 Hfi Innovation Inc. Method of intra picture block copy for screen content and video coding
EP3198872A1 (en) 2014-09-26 2017-08-02 VID SCALE, Inc. Intra block copy coding with temporal block vector prediction
KR102131142B1 (ko) * 2015-01-29 2020-07-07 브이아이디 스케일, 인크. 인트라-블록 카피 검색
US10887597B2 (en) 2015-06-09 2021-01-05 Qualcomm Incorporated Systems and methods of determining illumination compensation parameters for video coding
US10812822B2 (en) * 2015-10-02 2020-10-20 Qualcomm Incorporated Intra block copy merge mode and padding of unavailable IBC reference region
US11070796B2 (en) * 2018-09-28 2021-07-20 Qualcomm Incorporated Ultimate motion vector expression based pruning for video coding
US20200112715A1 (en) * 2018-10-05 2020-04-09 Qualcomm Incorporated History-based motion vector prediction for inter prediction coding
US11184633B2 (en) * 2018-11-27 2021-11-23 Qualcomm Incorporated Simplification of history-based motion vector prediction
CN113170150B (zh) * 2018-12-03 2024-02-27 北京字节跳动网络技术有限公司 基于历史的运动矢量预测(hmvp)模式的部分修剪方法
US11025936B2 (en) * 2019-01-25 2021-06-01 Tencent America LLC Method and apparatus for video coding
US11190800B2 (en) * 2019-02-07 2021-11-30 Qualcomm Incorporated Motion vector predictor list generation for intra block copy mode in video coding

Also Published As

Publication number Publication date
US11546626B2 (en) 2023-01-03
AU2024201140A1 (en) 2024-03-14
KR20210088688A (ko) 2021-07-14
CA3120795A1 (en) 2020-09-10
US20230130158A1 (en) 2023-04-27
CN113660497A (zh) 2021-11-16
JP2022522570A (ja) 2022-04-20
MX2021008402A (es) 2021-08-18
AU2020233003A1 (en) 2021-06-10
EP3878181A1 (en) 2021-09-15
US20200374541A1 (en) 2020-11-26
WO2020177505A1 (en) 2020-09-10
AU2020233003B2 (en) 2023-11-23
EP3878181A4 (en) 2022-03-09
CN113660497B (zh) 2022-06-28
JP7477066B2 (ja) 2024-05-01
CN112889290A (zh) 2021-06-01

Similar Documents

Publication Publication Date Title
CN113039798B (zh) 解码设备实现的译码方法及解码器
US11985305B2 (en) Encoder, a decoder and corresponding methods using for IBC merge list
BR112021009848A2 (pt) codificador, decodificador e métodos correspondentes para predição inter
CN112913250B (zh) 编码器、解码器及对任意ctu尺寸使用ibc搜索范围优化的对应方法
US11558607B2 (en) Encoder, a decoder and corresponding methods using history based motion vector prediction
CN113660497B (zh) 编码器、解码器和使用ibc合并列表的对应方法
BR112021016677A2 (pt) Método e aparelho para predição inter baseada em afim de sub-blocos de croma
BR112020026818A2 (pt) codificador, decodificador e métodos correspondentes de derivação de resistência de limite de filtro de desbloqueio
BR112021008016A2 (pt) codificador, decodificador e métodos correspondentes para modo de fusão
BR112021001813A2 (pt) método de processamento de vídeo, aparelho de processamento de vídeo, codificador, decodificador, mídia e programa de computador
BR112021016270A2 (pt) Método de codificação de vídeo e codificador, decodificador, meio legível por computador
BR112021010286A2 (pt) codificador, decodificador e métodos correspondentes de construção de lista de modos mais prováveis para blocos com predição de múltiplas hipóteses
CN113597761A (zh) 帧内预测方法和装置
BR122023021035A2 (pt) Método de compactação do vetor de movimento, meio de armazenamento legível por computador não transitório, codificador, decodificador e meio de armazenamento
BR112021009833A2 (pt) codificador, decodificador e métodos correspondentes para predição inter
BR112021007509A2 (pt) lista de mesclagem separada para candidatos de mesclagem de sub-bloco e harmonização de técnicas intra-inter para codificação de vídeo
US11997296B2 (en) Motion field storage optimization for a line buffer
US20220132150A1 (en) Motion field storage optimization for a line buffer