BR112017009946B1 - Métodos de conversão de pixel de escape em código em conversão de mapa de indicador em código - Google Patents
Métodos de conversão de pixel de escape em código em conversão de mapa de indicador em código Download PDFInfo
- Publication number
- BR112017009946B1 BR112017009946B1 BR112017009946-2A BR112017009946A BR112017009946B1 BR 112017009946 B1 BR112017009946 B1 BR 112017009946B1 BR 112017009946 A BR112017009946 A BR 112017009946A BR 112017009946 B1 BR112017009946 B1 BR 112017009946B1
- Authority
- BR
- Brazil
- Prior art keywords
- palette
- copy
- mode
- pixel
- code
- Prior art date
Links
Abstract
MÉTODOS DE CONVERSÃO DE PIXEL DE ESCAPE EM CODIGO EM CONVERSÃO DE MAPA DE INDICADOR EM CÓDIGO. Trata-se de um método de conversão de vídeo em código com custo de implantação reduzido reutilizando-se paleta de armazenamento temporário de coeficiente de transformada para conversão de paleta em código. Caso o modo de predição atual seja um modo de Intrapredição ou o modo de Interpredição, as informações relacionadas a coeficientes de transformada para predição de resíduo do bloco atual que resultaram de Intrapredição ou Interpredição são armazenadas no armazenamento temporário de coeficiente de transformada. Caso o modo de predição atual seja o modo de conversão de paleta em código, as informações relacionadas a dados de paleta associados ao bloco atual são armazenadas no armazenamento temporário de coeficiente de transformada. O bloco atual é, então, codificado ou decodificado com base nas informações relacionadas aos coeficientes de transformada caso o bloco atual seja convertido em código no modo de Intrapredição ou no modo de Interpredição, ou nas informações relacionadas aos dados de paleta armazenadas no armazenamento temporário de coeficiente de transformada caso o modo de predição atual seja o modo de conversão de paleta em código.
Description
[001] A presente invenção reivindica a prioridade do Pedido de Patente Provisório de n° U.S. 62/078.595, depositado em 12 de novembro 2014, Pedido de Patente Provisório de n° U.S. 62/087.454, depositado em 4 de dezembro de 2014, Pedido de Patente Provisório de n°- U.S. 62/119.950, depositado em 24 de fevereiro 2015, Pedido de Patente Provisório de n° U.S. 62/145.578, depositado em 10 de abril de 2015, Pedido de Patente Provisório de n° U.S. 62/162.313, depositado em 15 de maio de 2015 e Pedido de Patente Provisório de n° U.S. 62/170.828, depositado em 4 de junho de 2015. Os Pedidos de Patente Provisórios dos E.U.A. são incorporados em sua totalidade ao presente documento a titulo de referência.
[002] A presente invenção refere-se à conversão de paleta em código para dados de video. Em particular, a presente invenção se refere a várias técnicas para poupar memória de sistema ou aumentar o rendimento de sistema reutilizando-se o armazenamento temporário de coeficiente de transformada ou agrupando-se os valores de escape, inicialização de preditor de paleta, semântica de entrada de preditor de paleta ou semântica de entrada de paleta.
[003] A Codificação de Video de Alta Eficiência (HEVC) é um novo padrão de conversão em código que tem sido desenvolvido nos últimos anos. No sistema de Codificação de Video de Alta Eficiência (HEVC), o macrobloco de tamanho fixo de H.264/AVC é substituído por um bloco flexível, denominado unidade de conversão em código (CU). Os pixels na CU compartilham os mesmos parâmetros de conversão em código para aprimorar a eficiência de conversão em código. Uma CU pode começar com uma CU maior (LCU) , que também é denominada como unidade de árvore convertida em código (CTU) em HEVC. Além do conceito de unidade de conversão em código, o conceito de unidade de predição (PU) também é introduzido em HEVC. Uma vez que a divisão da árvore hierárquica de CU é feita, cada CU folha é dividida adicionalmente em uma ou mais unidades de predição (PUs) de acordo com tipo de predição e partição de PU. Diversas ferramentas de conversão em código para conversão de conteúdo de tela em código têm sido desenvolvidas. Essas ferramentas relacionadas à presente invenção são revisadas brevemente a seguir.
[004] Durante o desenvolvimento de conversão de conteúdo de tela em código (SCO de HEVC, diversas propostas têm sido reveladas para endereçar conversão em código com base em paleta. Por exemplo, uma técnica de predição e compartilhamento de paleta é revelada em JCTVC-N0247 (Guo et al., "RCE3: Results of Test 3.1 on Palette Mode for Screen Content Coding", Equipe de Colaboração Conjunta em codificação de vídeo (JCT-VC) de ITU-T SG 16 WP 3 e ISO/IEC JTC 1/SC 29/WG 11, 14a Reunião: Viena, AT, 25 de julho a 2 de agosto de 2013, Documento: JCTVC-N0247) e JCTVC-O0218 (Guo et al., "Evaluation of Palette Mode Coding on HM- 12.O+RExt-4.1", Equipe de Colaboração Conjunta em Codificação de Vídeo (JCT-VC) de ITU-T SG 16 WP 3 e ISO/IEC JTC 1/SC 29/WG 11, 15a Reunião: Genebra, CH, 23 de outubro a 1 de novembro de 2013, Documento: JCTVC-O0218) . Em JCTVC-N0247 e JCTVC-O0218, a paleta de cada componente de cor é construída e transmitida. A paleta pode ser predita (ou compartilhada) a partir de sua CU contígua à esquerda para reduzir a taxa de bits. Todos os pixels dentro do dado bloco são, então, convertidos em código com o uso de seus índices de paleta. Um exemplo de processo de codificação de acordo com JCTVC-N0247 é mostrado a seguir.
[005] Transmissão da paleta: o tamanho da tabela de indicador de cor (também chamada tabela de paleta) é transmitido primeiro, seguido pelos elementos de paleta (isto é, valores de cor).
[006] Transmissão de valores de indicador de paleta de pixel (indices que apontam para as cores na paleta) : os valores de indicador para os pixels na CU são codificados em uma ordem de varredura. Para cada posição, um sinalizador é transmitido primeiro para indicar se o "modo de execução" ou o "modo de execução Copiar Acima" está sendo usado.a. "Modo de execução": Em "modo de execução", um indicador de paleta é sinalizado primeiro seguido por "palette_run" (por exemplo, M). Nenhuma informação adicional precisa ser transmitida para a posição atual e para as M posições seguintes uma vez que as mesmas têm o mesmo indicador de paleta conforme sinalizado. O indicador de paleta (por exemplo, i) é compartilhado por todos os três componentes de cor, o que significa que os valores de pixel reconstruídos são (Y, U, V) — (palettey [i], paletteu [i], palettev [i] ) (assumindo-se que o espaço de cor seja YUV) .b. "Modo de execução Copiar Acima": Em "modo de execução Copiar Acima", um valor "copy_run" (por exemplo, N) é transmitido para indicar que para as N posições seguintes (incluindo a atual), os indices de paleta são iguais aos indices de paleta daqueles que estão nas mesmas posições na fila acima.
[007] Transmissão de residuo: os indices de paleta transmitidos no Estágio 2 são reconvertidos para valores de pixel e usados como a predição. As informações de residuo são transmitidas com o uso de conversão de residuo em código de HEVC e são adicionadas à predição para a reconstrução.
[008] Em JCTVC-N0247, a paleta de cada componente é construída e transmitida. A paleta pode ser predita (ou compartilhada) a partir de sua CU contígua à esquerda para reduzir a taxa de bits. Em JCTVC-O0218, cada elemento na paleta é um tripleto, que representa uma combinação especifica dos três componentes de cor. A conversão em código preditiva de paleta através de CU é removida.
[009] Em JCTVC-O0182 (Guo et al. , "AHG8: Major-color- based screen content coding", Equipe de Colaboração Conjunta em codificação de video (JCT-VC) de ITU-T SG 16 WP 3 e ISO/IEC JTC 1/SC 29/WG 11, 15a Reunião: Genebra, CH, 23 de outubro a 1 de novembro de 2013, Documento: JCTVC-O0182), outro método de conversão de paleta em código é revelado. Em vez de predizer a tabela de paleta inteira a partir da CU à esquerda, uma entrada de cor de paleta individual em uma paleta pode ser predita a partir da entrada de cor de paleta correspondente exata na CU acima ou CU à esquerda.
[010] Para a transmissão de valores de indicador de paleta de pixel, um método de conversão em código preditivo é aplicado nos Índices de acordo com JCTVC-00182. Uma linha de indicador pode ser predita por modos diferentes. Especificamente, três espécies de modos de para uma linha de indicador, isto é modo horizontal, modo vertical e modo normal. Em modo horizontal, todos os indices na mesma linha têm o mesmo valor. Caso o valor seja o mesmo que o primeiro pixel da linha de pixel acima, apenas bits de sinalização de modo de linha são transmitidos. Caso contrário, o valor de indicador também é transmitido. Em modo vertical, a linha de indicador atual é a mesma que a linha de indicador acima. Portanto, apenas bits de sinalização de modo de linha são transmitidos. Em modo normal, os indices em uma linha são preditos individualmente. Para cada posição de indicador, a contigua à esquerda ou acima é usada como preditora, e o simbolo de predição é transmitido para o decodificador.
[011] Além disso, de acordo com o JCTVC-00182, os pixels são classificados em pixels de cor principal (com indices de paleta que apontam para as cores de paleta) e pixel de escape. Para os pixels de cor principal, o decodificador reconstrói o valor de pixel de acordo com o indicador de cor principal (isto é, indicador de paleta no JCTVC-N0247 e no JCTVC-00182) e com a tabela de paleta. Para o pixel de escape, o codificador enviará adicionalmente o valor de pixel.
[012] No software referência do padrão de Conversão de Conteúdo de Tela em Código (SCC), SCM-2.0 (JCTVC-R1014: Joshi, et al., Screen content coding test model 2 (SCM 2), Equipe de Colaboração Conjunta em codificação de video (JCT- VC) de ITU-T SG 16 WP 3 e ISO/IEC JTC 1/SC 29/WG 11, 18a Reunião: Sapporo, JP, 30 de junho a 9 de julho de 2014, Documento: JCTVC-R1014), a tabela de paleta da última CU de N paleta convertida em código é usada como um preditor para a conversão de tabela de paleta atual em código. Em conversão de tabela de paleta em código, um palette_share_flag é sinalizado primeiro. Caso o palette_share_flag seja 1, todas as cores de paleta na última tabela de paleta convertida em código são reutilizadas para a CU atual. 0 tamanho de paleta atual é igual ao tamanho de paleta da última CU de paleta convertida em código nesse caso. Caso contrário (isto é, palette_share_flag é 0), a tabela de paleta atual é sinalizada indicando-se quais cores de paleta na última tabela de paleta convertida em código podem ser reutilizadas, ou transmitindo-se novas cores de paleta. O tamanho da paleta atual é definido como o tamanho da paleta predita (isto é, numPredPreviousPalette) somado ao tamanho da paleta transmitida (isto é, num_signaled_palette_entries). A paleta predita é uma paleta derivada das CUs convertidas em código de paleta reconstruída previamente. Quando se converte em código a CU atual como um modo de paleta, as cores de paleta não são preditas com o uso da paleta predita são transmitidas diretamente por meio do fluxo de bits. Por exemplo, caso a CU atual seja convertida em código como um modo de paleta com um tamanho de paleta igual a seis. Caso três das seis cores principais sejam preditas a partir do preditor de paleta e três são transmitidas diretamente através do fluxo de bits. Os pseudocódigos a seguir ilustram um exemplo de três cores de paleta transmitidas com o uso da amostra de sintaxe mencionada acima. num_signaled_palette_entries= 3 para (cldx = 0 cldx < 3 cldx++) //sinalizar cores para componentes diferentes para (i = 0; i <num_signaled_palette_entries; i++) palette_entries [cldx] [numPredPreviousPalette + i]
[013] Uma vez que o tamanho de paleta é seis nesse exemplo, os indices de paleta de 0 a 5 são usados para indicar cada pixel convertido em código da paleta e cada paleta pode ser reconstruída como a cor principal na tabela de cor de paleta.
[014] Em SCM-2.0, caso o processamento paralelo de frente de onda (WPP) não seja aplicado, a última tabela de paleta convertida em código é inicializada (isto é, reinicializada) no começo de cada fatia ou no começo de cada fragmento. Caso o WPP seja aplicado, a última tabela de paleta convertida em código não é apenas inicializada (reinicializada) no começo de cada fatia ou no começo de cada fragmento, mas também é inicializada (isto é, reinicializada) no começo de cada fila de CTU.
[015] Em a conversão em código em modo de paleta em SCM- 3.0 (JCTVC-S1014, Joshi, et al., "Screen content coding test model 3 (SCM 3)", Equipe de Colaboração Conjunta em codificação de video (JCT-VC) de ITU-T SG 16 WP 3 e ISO/IEC JTC 1/SC 29/WG 11, 19a Reunião: Estrasburgo, FR, 17 a 24 de outubro de 2014, Documento: JCTVC-S1014), a varredura transversal é usada para conversão de mapa de indicador em código conforme mostrado na Figura 1. A Figura 1 ilustra um exemplo de varredura transversal para um bloco 8x8 . Em varredura transversal, a varredura para as filas pares é da esquerda para a direita, e a varredura para as filas impares é da direita para a esquerda. A varredura transversal é aplicada a todos os tamanhos de bloco em modo de paleta.
[016] Na conversão em código em modo de paleta em SCM- 4.0 (JCTVC-T1014: Joshi, et al., Screen content coding test model 4 (SCM 4), Equipe de Colaboração Conjunta em codificação de video (JCT-VC) de ITU-T SG 16 WP 3 e ISO/IEC JTC 1/SC 29/WG 11, 20a Reunião: Genebra, CH, 10 a 18 de fevereiro de 2015, Documento: JCTVC-T1014), os índices de paleta são agrupados e sinalizados na frente dos dados convertidos em código para um bloco correspondente (isto é, antes de conversão em código em palette_run_mode e palette_run). Por outro lado, os pixels de escape são convertidos em código no fim dos dados convertidos em código para o bloco correspondente. Os elementos de sintaxe, palette_run_mode e palette_run são convertidos em código entre índices de paleta e pixels de escape. A Figura 2 ilustra um fluxograma exemplificative para sinalização de sintaxe de mapa de indicador de acordo com o SCM 4.0. 0 número de índices (210), último sinalizador de tipo de execução (230) e índices agrupados (220) são sinalizados. Após as informações de indicador de sinalização, um par de tipo de execução (240) e número de execuções (250) é sinalizado repetidamente. Por fim, um grupo de valores de escape (260) é sinalizado, caso necessário.
[017] No SCM-4.0, um conjunto de preditor de paleta global é sinalizado em PPS (conjunto de parâmetros de imagem). Em vez de reinicializar todos os estados de predição de paleta, que incluem PredictorPaletteSize, PreviousPaletteSize e PredictorPaletteEntries, para 0, os valores obtidos do PPS são usados.
[018] Para uma execução de indices no mapa de indicador, há diversos elementos que precisam ser sinalizados, que incluem: 1) Tipo de execução: o mesmo é uma execução Copiar Acima ou uma execução de indicador de cópia. 2) Indicador de paleta: o mesmo é usado para sinalizar qual indicador é usado para essa execução em uma execução de indicador de cópia. 3) Tamanho de execução: o mesmo representa o tamanho dessa execução para tipo tanto sobre cópia como indicador de cópia. 4) Pixel de escape: caso haja N (N>=1) pixels de escape na execução, N valores de pixel precisam ser sinalizados para esses N pixels de escape.
[019] No JCTVC-T0064 (JCTVC-S1014: Joshi, et al., Screen content coding test model 4 (SCM 4), Equipe de Colaboração Conjunta em codificação de video (JCT-VC) de ITU-T SG 16 WP 3 e ISO/IEC JTC 1/SC 29/WG 11, 20a Reunião: Genebra, CH, 10 a 18 de fevereiro de 2015, Documento: JCTVC-T1014) , todos os indices de paleta são agrupados. O número de indices de paleta é sinalizado primeiro, seguido pelos indices de paleta.
[020] De acordo com a especificação de HEVC existente, embora os indices de paleta para cada componente de cor sejam agrupados, a maior parte dos outros dados relacionados à conversão de paleta em código para componentes de cor diferentes são intercalados no fluxo de bits. Além disso, espaço de memória individual para armazenar um bloco Inter/Intraconvertido em código e armazenar um bloco convertido em código de paleta. É desejado o desenvolvimento de técnicas para aprimorar o rendimento de sistema e/ou reduzir o custo de implantação de sistema.
[021] Um método de conversão de video em código com custo de implantação reduzido reutilizando-se paleta de armazenamento temporário de coeficiente de transformada para conversão de paleta em código é revelado. Caso o modo de predição atual seja um modo de Intrapredição ou o modo de Interpredição, as informações relacionadas a coeficientes de transformada para predição de residuo do bloco atual que resultaram de Intrapredição ou Interpredição são armazenadas no armazenamento temporário de coeficiente de transformada. Caso o modo de predição atual seja o modo de conversão de paleta em código, as informações relacionadas a dados de paleta associados ao bloco atual são armazenadas no armazenamento temporário de coeficiente de transformada. O bloco atual é, então, codificado ou decodificado com base nas informações relacionadas aos coeficientes de transformada caso o bloco atual seja convertido em código no modo de Intrapredição ou no modo de Interpredição, ou nas informações relacionadas aos dados de paleta armazenadas no armazenamento temporário de coeficiente de transformada caso o modo de predição atual seja o modo de conversão de paleta em código.
[022] Caso o modo de predição atual seja o modo de conversão de paleta em código, os dados de paleta podem corresponder ao tipo de execução de paleta, indicador de paleta, execução de paleta, valores de escape, sinalizadores de escape, tabela de paleta ou qualquer combinação dos mesmos associados ao bloco atual. As informações relacionadas aos dados de paleta podem corresponder aos dados de paleta, aos dados de paleta analisados ou aos dados de paleta reconstruídos. Por exemplo, os indices de paleta analisados para amostras do bloco atual são reconstruídos em um estágio de análise, e os índices de paleta reconstruídos e os valores de escape reconstruídos são armazenados no armazenamento temporário de coeficiente de transformada em um lado de decodificador. Em outro exemplo, os índices de paleta analisados para amostras do bloco atual são reconstruídos, os índices de paleta reconstruídos são reconstruídos adicionalmente em valores de pixel reconstruídos com o uso de uma tabela de paleta em um estágio de análise, e os valores de pixel reconstruídos e os valores de escape reconstruídos são armazenados no armazenamento temporário de coeficiente de transformada em um lado de decodificador. Além disso, uma área de armazenamento pode ser designada para armazenar a tabela de paleta durante o estágio de análise, e a área de armazenamento pode ser liberada de uso pela tabela de paleta durante o estágio de reconstrução. Os sinalizadores de escape também podem ser armazenados no armazenamento temporário de coeficiente de transformada no lado de decodificador. Em outro exemplo adicional, os sinalizadores de escape são armazenados em uma parte do armazenamento temporário de coeficiente de transformada (por exemplo, a parte de bit mais significativo (MSB) de armazenamento temporário de coeficiente de transformada), e os valores de pixel reconstruídos ou os valores de escape são armazenados em outra parte do armazenamento temporário de coeficiente de transformada.
[023] Em outra modalidade, caso um modo de predição atual seja o modo de conversão de paleta em código, todos os valores de escape para um mesmo componente de cor agrupados são analisados a partir do fluxo de bits de video em um lado de decodificador, ou todos os valores de escape para o mesmo componente de cor são agrupados em um lado de codificador. As informações que incluem os valores de escape são, então, usadas para codificação ou decodificação do bloco atual. Os valores de escape agrupados para o mesmo componente de cor podem ser sinalizados no fim de dados convertidos em código de paleta para o bloco atual. Os valores de escape agrupados para componentes de cor diferentes podem ser sinalizados separadamente para o bloco atual. Os valores de escape agrupados para o mesmo componente de cor do bloco atual podem ser armazenados em um armazenamento temporário de coeficiente de transformada. Os valores de escape agrupados para componentes de cor diferentes podem compartilhar o armazenamento temporário de coeficiente de transformada armazenando-se os valores de escape agrupados para um componente de cor no armazenamento temporário de coeficiente de transformada de cada vez.
[024] Em outra modalidade adicional, todos os valores de preditor de paleta iniciais para um mesmo componente de cor agrupados são analisados a partir do conjunto de parâmetros de sequência (SPS), do conjunto de parâmetros de imagem (PPS) ou de um cabeçalho de fatia de um fluxo de bits de video em um lado de decodificador, ou todos os valores de preditor de paleta iniciais para o mesmo componente de cor são agrupados em um lado de codificador. Pelo menos um bloco convertido em código de paleta dentro de uma sequência, imagem ou fatia correspondente é codificado ou decodificado com o uso dos valores de preditor de paleta iniciais.
[025] Em ainda outra modalidade adicional, todas as entradas de preditor de paleta ou entradas de paleta para um mesmo componente de cor agrupadas para um bloco atual são analisadas a partir de um fluxo de bits de video em um lado de decodificador, ou todas as entradas de preditor de paleta ou entradas de paleta para o mesmo componente de cor são agrupadas em um lado de codificador. O bloco atual é, então, codificado ou decodificado com o uso de um preditor de paleta que consiste em todas as entradas de preditor de paleta ou uma tabela de paleta que consiste em todas as entradas de paleta.
[026] A Figura 1 ilustra um exemplo de varredura transversal para um bloco 8x8.
[027] A Figura 2 ilustra uma sinalização de sintaxe de mapa de indicador de paleta exemplificativa de acordo com o módulo de teste de conversão de conteúdo de tela em código versão 4 (SCM-4.0).
[028] A Figura 3A ilustra uma inversão de mapa de indicador exemplificativa antes da conversão de indicador em código.
[029] A Figura 3B ilustra um exemplo de mapa de indicador invertido que corresponde ao mapa de indicador na Figura 3A.
[030] A Figura 4 ilustra um exemplo de inversão do mapa de indicador antes da conversão de mapa de indicador em código, em que o uso dos pixels contiguos construídos acima para predizer os pixels na última fila em posição fisica é 1 ineficiente.
[031] As Figuras 5A-B ilustram um exemplo de predição a partir da CU acima com mapa de indicador invertido de acordo com uma modalidade da presente invenção, em que os indices no modo de execução Copiar Acima são sempre preditos a partir de suas posições fisicas acima independentemente do mapa de indicador ser invertido. Na Figura 5A, os blocos preenchidos por linhas representam o mapa de indicador invertido enquanto os blocos limpos na Figura 5B representam o mapa de indicador original.
[032] As Figuras 6A-B ilustram outro exemplo de predição a partir da CU acima com mapa de indicador invertido de acordo com uma modalidade da presente invenção, em que os pixels convertidos em código de execução Copiar Acima da primeira fila são preditos a partir das amostras em suas posições fisicas mais próximas. Na Figura 6A, os blocos preenchidos por linhas representam o mapa de indicador invertido enquanto os blocos limpos na Figura 6B representam o mapa de indicador original.
[033] As Figuras 7A-B ilustram outro exemplo de predição a partir da CU acima com mapa de indicador invertido de acordo com uma modalidade da presente invenção, em que os pixels convertidos em código de execução Copiar Acima da última fila são preditos a partir de suas posições físicas de pixel da CU contígua acima. Na Figura 7A, os blocos preenchidos por linhas representam o mapa de indicador invertido enquanto os blocos limpos na Figura 7B representam o mapa de indicador original.
[034] A Figura 8A ilustra um exemplo de modo de execução Copiar Acima estendido, em que duas linhas de pixels é, L = 2) são copiadas a partir de uma linha acima que é localizada acima do limite de CU.
[035] A Figura 8B ilustra um exemplo de predição através de uma CU sinalizando-se um elemento de sintaxe, pixel_num (M) para indicar que as primeiras M (isto é, M=ll) amostras são preditas a partir dos pixels reconstruídos.
[036] A Figura 9A ilustra um exemplo dos valores de pixel das primeiras duas linhas de amostras que são preditas pelos valores de pixel reconstruídos da última fila da CU acima.
[037] A Figura 9B ilustra um exemplo dos valores de pixel das primeiras duas colunas de amostras que são preditas pelos valores de pixel reconstruidos da coluna mais à direita da CU à esquerda.
[038] As Figuras 10A-C ilustram três padrões de varredura diferentes de acordo com uma modalidade da presente invenção para predição através de uma CU.
[039] As Figuras 11A-C ilustram três padrões de varredura diferentes de acordo com outra modalidade da presente invenção para predição através de uma CU.
[040] As Figuras 12A-B ilustram dois padrões de varredura diferentes com varredura reversa de acordo com uma modalidade da presente invenção para predição através de uma CU.
[041] A Figura 13 ilustra um exemplo de extensão do pixel de cópia baseada em fila de CU contigua para uma CU 8x8 convertida em código no modo Inter.
[042] A Figura 14 ilustra um exemplo de mudança das posições dos pixels de referência contiguos de acordo com uma modalidade da presente invenção, em que os pixels de referência superiores à direita são copiados da CU superior à direita.
[043] A Figura 15 ilustra outro exemplo de mudança das posições dos pixels de referência contiguos, de acordo com uma modalidade da presente invenção, em que os pixels de referência superiores à direita são copiados dos pixels mais à direita da terceira fila.
[044] A Figura 16 ilustra um exemplo de decodificação de cores de escape de acordo com uma modalidade com N pixels de escape em diferentes localizações dentro do bloco de conversão em código atual (N = 5), em que o valor de pixel de cada ocorrência de pixel de escape ainda é escrito no fluxo de bits e a varredura transversal horizontal é usada.
[045] A Figura 17 ilustra um exemplo de decodificação de cores de escape de acordo com outra modalidade com N pixels de escape em localizações diferentes dentro do bloco de conversão em código atual (N = 5), em que apenas cores não duplicadas são decodificadas.
[046] A Figura 18 ilustra um exemplo de uso de um indicador especial para o pixel construido contiguo (NCPs), denotado como N, através de um limite de CU.
[047] A Figura 19 ilustra um exemplo de uso de um indicador especial para o pixel construido contiguo (NCPs) no caso em que o valor de indicador máximo é 0.
[048] A Figura 20 ilustra um exemplo de uso de um indicador especial para o pixel construido contiguo (NCPs) no caso em que o valor de indicador máximo é 1.
[049] A Figura 21 ilustra um fluxograma exemplificative de sinalização para suportar predição de indicador através de uma CU, em que um novo sinalizador all_pixel_from_NCP_flag é adicionado e é usada sintaxe de acordo com SCM3.0 para predição de indicador através de uma CU.
[050] A Figura 22 ilustra um fluxograma exemplificativo de sinalização para suportar a predição de indicador através de uma CU, em que um novo sinalizador allpixel_f rom_NCP_f lag é adicionado e é usada sintaxe de acordo com SCM3.0 sem predição de indicador através de uma CU quando all_pixel_from_NCP_flag está desligado.
[051] A Figura 23 ilustra outro fluxograma exemplificativo similar àquele da Figura 22. No entanto, a sintaxe de acordo com SCM3.0 é usada para predição de indicador através de uma CU quando o valor de indicador máximo não é 0.
[052] A Figura 24 ilustra um fluxograma exemplificativo de sinalização para suportar predição de indicador através de uma CU de acordo com uma modalidade da presente invenção.
[053] A Figura 25 ilustra um fluxograma exemplificativo de sinalização para suportar a predição de indicador através de uma CU de acordo com outra modalidade da presente invenção.
[054] A Figura 26 ilustra um fluxograma exemplificative de sinalização para suportar a predição de indicador através de uma CU de acordo com outra modalidade adicional da presente invenção.
[055] A Figura 27 ilustra um fluxograma exemplificativo de sinalização para suportar a predição de indicador através de uma CU de acordo com outra modalidade adicional da presente invenção.
[056] A Figura 28A ilustra um fluxograma exemplificativo de sinalização para suportar a predição de indicador através de uma CU de acordo com outra modalidade adicional da presente invenção.
[057] A Figura 28B ilustra um fluxograma exemplificativo de sinalização para suportar a predição de indicador através de uma CU de acordo com outra modalidade adicional da presente invenção.
[058] A Figura 29 ilustra um exemplo de pixels fonte para predição de Cópia Intrabloco e compensação, em que as áreas preenchidas com pontos correspondem a pixels não filtrados na CTU (unidade de árvore de conversão em código) atual e CTU à esquerda.
[059] A Figura 30 ilustra outro exemplo de pixels fonte para predição de Cópia Intrabloco e compensação, em que as áreas preenchidas com pontos correspondem a pixels não filtrados na CTU (unidade de árvore de conversão em código) atual, CTU à esquerda, e quatro linhas inferiores da CTU acima e quatro linhas inferiores de CTU acima à esquerda.
[060] A Figura 31 ilustra outro exemplo adicional de pixels fonte para predição de Cópia Intrabloco e compensação, em que as áreas preenchidas com pontos correspondem a pixels não filtrados na CTU (unidade de árvore de conversão em código) atual, N CTUs à esquerda, quatro linhas inferiores da CTU acima e quatro linhas inferiores de N CTUs acima à esquerda.
[061] A Figura 32 ilustra outro exemplo adicional de pixels fonte para predição de Cópia Intrabloco e compensação, em que as áreas preenchidas com pontos correspondem a pixels não filtrados na CTU (unidade de árvore de conversão em código) atual, quatro linhas inferiores da CTU acima, e quatro colunas à direita da CTU à esquerda.
[062] A Figura 33 ilustra outro exemplo adicional de pixels fonte para predição de Cópia Intrabloco e compensação em que as áreas preenchidas com pontos correspondem a pixels não filtrados na CTU (unidade de árvore de conversão em código) atual, N CTUs à esquerda, e quatro linhas inferiores da CTU acima, quatro linhas inferiores de N CTUs acima à esquerda e quatro colunas à direita da (Ntl)-ésima CTU à esquerda.
[063] A Figura 34 ilustra um fluxograma exemplificative para um sistema que incorpora uma modalidade da presente invenção para bloco convertido em código de paleta compartilhar armazenamento temporário de coeficiente de transformada.
[064] A descrição a seguir é do melhor modo contemplado para executar a invenção. Essa descrição é feita com o propósito de ilustração dos princípios gerais da invenção e não deve ser tomada em um sentido limitante. O escopo da invenção é determinado da melhor forma em referência às reivindicações anexas.
[065] Em HEVC, Interpredição e Intrapredição são modos de conversão em código disponíveis além de conversão de paleta em código. Quando Inter ou Intrapredição é usada, conversão em código de transformada frequentemente é aplicada à predição de resíduo que resulta de Inter/Intrapredição. Os coeficientes de transformada são, então, quantizados e convertidos em código por entropia para inclusão no fluxo de bits convertido em código. No lado de decodificador, a operação reversa é aplicada ao fluxo de bits recebido. Em outras palavras, decodificação por entropia é aplicada ao fluxo de bits para recuperar os simbolos convertidos em código que correspondem a coeficientes de transformada quantizados. Os coeficientes de transformada quantizados são, então, desquantizados e transformados inversamente para reconstruir a Inter/Intrapredição de residue. Um armazenamento temporário de coeficiente de transformada é usado frequentemente no lado de codificador e no lado de decodificador para armazenar coeficientes de transformada como exigido entre as operações de conversão em código por entropia e quantização/transformação.
[066] Para dados de cor de video, múltiplos armazenamentos temporários de coeficiente de transformada podem ser necessários. No entanto, também é possível configurar o sistema para processar um componente de cor de cada vez de modo que apenas um armazenamento temporário de coeficiente de transformada é necessário. Quando um bloco é convertido em código por paleta, nenhuma transformada é aplicada ao bloco e o armazenamento temporário de coeficiente de transformada não é usado. A fim de economizar custo de implantação de sistema, uma modalidade da presente invenção reutiliza o armazenamento temporário de coeficiente de transformada para armazenar os dados relacionados à conversão de paleta em código. Consequentemente, para um bloco Inter/Intraconvertido em código, os coeficientes decodificados de um TU são armazenados no armazenamento temporário de coeficiente durante o estágio de análise de coeficiente. No entanto, para um bloco convertido em código por SCC (conversão de conteúdo de tela em código) , não há nenhuma conversão de resíduo em código necessária para o bloco convertido em código de paleta. Portanto, de acordo com uma modalidade da presente invenção, o armazenamento temporário de coeficiente de transformada é usado para armazenar as informações relacionadas à conversão de paleta em código, que podem incluir o tipo de execução de paleta, o indicador de paleta, a execução de paleta, os valores de escape, os sinalizadores de escape, a tabela de paleta ou qualquer combinação dos mesmos.
[067] Por exemplo, os índices de paleta analisados para amostras de um bloco são reconstruídos no estágio de análise. 0 armazenamento temporário de coeficiente de transformada é usado para armazenar os índices de paleta reconstruídos e os valores de escape.
[068] Em outro exemplo, os índices de paleta analisados para amostras de um bloco são reconstruídos no estágio de análise. Os índices analisados são usados para reconstruir valores de pixel para um componente de cor correspondente com o uso de pesquisa de tabela de paleta no estágio de análise. Portanto, o armazenamento temporário de coeficiente é usado para armazenar os valores de pixel reconstruídos e valores de escape, ou é usado para armazenar os valores de pixel reconstruídos, valores de escape e sinalizadores de escape. Nesse caso, a tabela de paleta precisa ser armazenada apenas no estágio de análise. Não há nenhuma necessidade de armazenar e manter a tabela de paleta durante o estágio de reconstrução.
[069] A profundidade de dados exigida para os coeficientes de transformada pode ser muita mais alta do que aquela para os dados relacionados à conversão de paleta em codigo. Por exemplo, o coeficiente de transformada pode eN i exigir um armazenamento temporário com profundidade de 16 bits. No entanto, para conversão de paleta em código, caso o indicador de paleta máximo seja 63, o armazenamento para índices de paleta exige apenas profundidade de 6 bits. Além disso, o tamanho de bits máximo para um valor de escape é igual à profundidade de bits, que é 8 ou 10 bits tipicamente. Portanto, uma porção dos 16 bits (isto é, 8 ou 6 bits) está livre e pode ser usada para armazenar as informações para o sinalizador de escape. Por exemplo, os seis MSB (bits mais significativos) do armazenamento temporário de coeficiente podem ser usados para armazenar os sinalizadores de escape. Os bits restantes são usados para armazenar os valores de pixel reconstruídos ou valores de escape. No estágio de reconstrução, os MSB podem ser usados para reconstruir os valores de escape ou os valores de pixel reconstruídos, diretamente.
[070] Em outro exemplo adicional, os índices de paleta analisados de amostras são reconstruídos no estágio de análise e os valores reconstruídos de componentes de cor diferentes também são reconstruídos com o uso de pesquisa de tabela de paleta no estágio de análise. Os valores de pixel da amostra de escape também são reconstruídos pelos valores de escape no estágio de análise. Portanto, o armazenamento temporário de coeficiente é usado para armazenar os valores de pixel reconstruídos. Nesse caso, a tabela de paleta precisa ser armazenada apenas no estágio de análise. O estágio de reconstrução precisa armazenar e manter a tabela de paleta.
[071] No SCM-4.0 (JCTVC-T1014 : Joshi, et al., Screencontent coding test model 4 (SCM 4), Equipe de Colaboração Conjunta em codificação de video (JCT-VC) de ITU-T SG 16 WP 3 e ISO/IEC JTC 1/SC 29/WG 11, 20a Reunião: Genebra, CH, 10 a 18 de fevereiro de 2015, Documento: JCTVC-T1014), os valores de escape para três componentes de cor são agrupados. Em outras palavras, para cada amostra, os valores de escape de três componentes são convertidos em código sequencialmente. Uma tabela de sintaxe da conversão de valor de escape em código de acordo com o JCTVC-T1014 é mostrada na Tabela 1.TABELA 1.
[072] Uma vez que não há nenhuma conversão de residuo em código para o modo de paleta, o armazenamento temporário de coeficiente pode ser reutilizado para armazenar as informações de mapa de indicador de paleta coeficiente de HEVC, apenas a TU de um componente de cor é analisada de cada vez. 0 analisador de sintaxe pode ter apenas um armazenamento temporário de coeficiente para um componente de cor e apenas um armazenamento temporário de coeficiente de um componente de cor pode ser acessado. No entanto, na conversão de paleta em código, um indicador de paleta representa os valores de pixel de múltiplos componentes de cor. 0 modo de paleta pode decodificar múltiplos valores de componente de cor de cada vez. O indicador de paleta pode ser armazenado em um armazenamento temporário de coeficiente de um componente de cor. No entanto, na ordem de análise de sintaxe de SCM-4.0 atual, os valores de escape podem precisar de três armazenamentos temporários de coeficiente para três componentes de cor.
[073] Portanto, de acordo com outra modalidade, a ordem de análise de sintaxe dos valores de escape é mudada para superar a questão relacionada à necessidade de três armazenamentos temporários de coeficiente para armazenar três componentes de cor. Os valores de escape do mesmo componente de cor são agrupados e sinalizados no fim da conversão de sintaxe de paleta em código para o bloco. Os valores de escape dos componentes de cor diferentes são sinalizados separadamente. Uma tabela de sintaxe exemplificativa para conversão de paleta em código que incorpora essa modalidade é mostrada na Tabela 2.TABELA 2.
[074] Na Tabela 2, o texto na área de linha preenchida indica deleçâo. A instrução de iteração de executar em componentes de cor diferentes (isto é, "for (cldx = 0 cldx < numComps ; cldx++)") é movida para cima, da localização original indicada pela Nota (2-1) para a nova localização indicada pela Nota (2-2). Consequentemente, a mesma pode analisar todos os valores de escape de um componente de cor para uma CU. Os indices de paleta e os valores de escape do primeiro componente de cor (isto é, cldx igual a 0) podem ser escritos e, então, o analisador pode reutilizar o mesmo armazenamento temporário para analisar as informações do segundo componente de cor. Com as mudanças de sintaxe na Tabela 2, um armazenamento temporário de coeficiente para armazenar os dados relacionados à conversão de paleta em código para um componente de cor é suficiente para analisar o modo de paleta. A complexidade e custo de implantação de analisador de SCC não sao aumentados.
[075] No SCM 4.0, um elemento de sintaxe de conjunto de PPS (Conjunto de Parâmetros de Imagem) é sinalizado para especificar o inicializador de preditor de paleta. A sintaxe existente para extensão de PPS é mostrada na Tabela 3.TABELA 3.
[076] 0 processo de inicialização de preditor de paleta de acordo com o SCM 4.0 existente é mostrado a seguir: • As saldas desse processo são as variáveis de preditor de paleta PredictorPaletteSize e PredictorPaletteEntries inicializadas. • A PredictorPaletteSize é derivada como o seguinte: - Se palette_predictor_initializer_present_flag é igual a 1, PredictorPaletteSize é definido igual a num_palette_predictor_initializer_minusl mais 1. Caso contrário, (palette_predictor_initializer_ present_flag é igual a 0) , PredictorPaletteSize é definido igual a 0. • A matriz PredictorPaletteEntries é derivada como o seguinte: - Se palette__predictor_initializer_present_f lag é igual a 1, para (i = 0 ! i < PredictorPaletteSize i++) para (comp = 0 > comp < 3 comp++) PredictorPaletteEntries [i] [comp] = palette_predictor_initializers [i] [comp] - Caso contrário, (palette_predictor_initializer present_flag é igual a 0), PredictorPaletteEntries é definido igual a 0.
[077] Em uma modalidade, os valores de inicialização de preditor podem ser agrupados para o componente Y, o componente Cb e o componente Cr respectivamente. As mudanças de sintaxe são mostradas na Tabela 4. Comparado à Tabela 3, as duas instruções de iteração de executar são trocadas conforme indicado pela Nota (4-1) e pela Nota (4-2) de modo a agrupar a inicialização de preditor de paleta do mesmo componente de cor.TABELA 4.
[078] Um processo de inicialização de preditor de paleta exemplificativo que corresponde à modalidade acima é mostrado a seguir: • As saidas desse processo são as variáveis de preditor de paleta PredictorPaletteSize e PredictorPaletteEntries inicializadas. • A PredictorPaletteSize é derivada como o seguinte: - Se palette_predictor_initializer_present_flag é igual a 1, PredictorPaletteSize é definido igual a num_palette_predictor_initializer_minusl mais 1. Caso contrário, (palette_predictor_initializer_ present_flag é igual a 0), PredictorPaletteSize é definido igual a 0 - A matriz PredictorPaletteEntries é derivada como o seguinte: - Se palette_predictor_initializer_present_flag é igual a 1, para (comp = 0 ! comp < 3 J comp++) para (i = 0 i < PredictorPaletteSize I i++) PredictorPaletteEntries [i] [comp] = palette_predictor_initializers [i] [comp] - Caso contrário, (palette_predictor_initializer_present _flag é igual a 0) , PredictorPaletteEntries é definido igual a 0 .
[079] Caso o inicializador de preditor de paleta seja sinalizado no SPS (conjunto de parâmetros de sequência) ou no cabeçalho de fatia, o mesmo método de agrupamento pode ser aplicado. Em outras palavras, todos os valores de inicialização para o componente Y são sinalizados conjuntamente, todos os valores de inicialização para o componente Cb são sinalizados conjuntamente, e todos os valores de inicialização para o componente Cr são sinalizados conjuntamente.
[080] O processo de atualização de preditor de paleta existente é como a seguir.
[081] A variável numComps é derivada conforme mostrado na equação (1) : numComps — (ChromaArrayType = = 0) ? 1: 3 (1).
[082] As variáveis PredictorPaletteSize e PredictorPaletteEntries são modificadas conforme mostrado pelos pseudocódigos na Tabela 5.TABELA 5.
[083] Conforme mostrado na Tabela 5, a primeira parte do processo de atualização de newPredictorPaletteEntries é realizado dentro da iteração de executar duplo indicado pela Nota (5-1) e pela Nota (5-2), em que a iteração de executar associada ao componente de cor (isto é, cldx) está na iteração de executar interna. Portanto, para cada entrada de paleta, três componentes de cor são atualizados. As duas instruções da iteração de executar para a atualização de newPredictorPaletteEntries restante são indicadas pela Nota (5-3) e pela Nota (5-4), em que a instrução da iteração de executar para os componentes de cor diferentes corresponde à iteração interna. Portanto, para cada entrada, três componentes de cor são atualizados. As duas instruções de iteração de executar para atualização de PredictorPaletteEntries são indicadas pela Nota (5-5) e pela Nota (5-6), em que a instrução de iteração de executar para componentes de cor diferentes corresponde à iteração externa. Portanto, os valores de PredictorPaletteEntries são atualizados para cada componente de cor. Em uma modalidade, os preditores de paleta para os três componentes respectivos são agrupados, e, então, atualizados. Modificações exemplificativas ao processo de atualização existente são mostradas a seguir.A derivação da variável numComps permanece igual à equação (1) . As variáveis PredictorPaletteSize e PredictorPaletteEntries são modificadas conforme mostrado pelos pseudocódigos exemplificativos a seguir na Tabela 6.TABELA 6.
[084] No exemplo acima, as duas instruções de iteração de executar para a primeira parte de atualização de newPredictorPaletteEntries são indicadas pela Nota (6-1) e pela Nota (6-2), em que a instrução de iteração de executar para componentes de cor diferentes corresponde à iteração externa. Portanto, os valores de newPredictorPaletteEntries restantes são atualizados para cada componente de cor. O processo de atualização de newPredictorPaletteEntries conforme indicado pela iteração de executar dupla indicada pela Nota (6-3) e pela Nota (6-4) permanece o mesmo que o processo de atualização existente na Tabela 5. O processo de atualização de PredictorPaletteEntries conforme indicado pela iteração de executar dupla indicada pela Nota (6-5) e pela Nota (6-6) permanece o mesmo que o processo de atualização existente na Tabela 5.
[085] Em outra modalidade, as variáveis PredictorPaletteSize e PredictorPaletteEntries são modificadas conforme mostrado pelos pseudocódigos exemplificativos a seguir na Tabela 7.TABELA 7.
[086] No exemplo acima, as duas instruções de iteração de executar para a primeira parte de atualização de newPredictorPaletteEntries são indicadas pela Nota (7-1) e pela Nota (7-2), em que a instrução de iteração de executar para componentes de cor diferentes corresponde à iteração externa. Portanto, os valores de newPredictorPaletteEntries restantes são atualizados para cada componente de cor. O processo de atualização de newPredictorPaletteEntries conforme indicado pela iteração de executar dupla indicada pela Nota (7-3) e pela Nota (7-4), em que a instrução de iteração de executar para componentes diferentes corresponde à iteração externa. Portanto, os valores de newPredictorPaletteEntries são atualizados para cada componente de cor. O processo de atualização de PredictorPaletteEntries conforme indicado pela iteração de executar dupla indicada pela Nota (7-5) e pela Nota (7-6) permanece o mesmo que o processo de atualização existente na Tabela 5.
[087] Em outra modalidade, as variáveis PredictorPaletteSize e PredictorPaletteEntries são modificadas conforme mostrado pelos pseudocódigos exemplificativos a seguir na Tabela 8.TABELA 8.
[088] No exemplo acima, as instruções de duas iterações para o processo de atualização de newPredictorPaletteEntries e de PredictorPaletteEntries são indicadas pela Nota (8-1), pela Nota (8-2), pela Nota (8-3) e pela Nota (8-4), em que a instrução de iteração de executar para componentes de cor diferentes corresponde à iteração externa. Portanto, os valores newPredictorPaletteEntries e PredictorPaletteEntries são atualizados para cada componente de cor.
[089] Vários exemplos de agrupamento do preditor de paleta do mesmo componente de cor para o processo de atualização foram mostrados da Tabela 6 à Tabela 8, em que elementos de sintaxe de HEVC foram usados para demonstrar o mesmo componente de cor, de acordo com uma modalidade da presente invenção. No entanto, a presente invenção não é limitada aos elementos de sintaxe específicos tampouco aos pseudocódigos específicos listados nesses exemplos. Uma pessoa versada no campo pode praticar a presente invenção sem se afastar do espirito da presente invenção.
[090] No SCM4.0 atual, o elemento de sintaxe palette_entry é usado para especificar o valor de um componente em uma entrada de paleta para a paleta atual. A variável PredictorPaletteEntries [cldx] [i] especifica o i- ésimo elemento na paleta de preditor para o componente de cor cldx. A variável numComps é derivada conforme mostrado na equação (1). A variável CurrentPaletteEntries [cldx] [i] especifica o i-ésimo elemento na paleta atual para o componente de cor cldx e é derivada conforme mostrado pelos pseudocódigos exemplificativos a seguir na Tabela 9.TABELA 9.
[091] Conforme mostrado na Tabela 9, as CurrentPaletteEntries do preditor de paleta são atualizadas conforme indicado pela Nota (9-1) e pela Nota (9-2), em que <o Rub % a instrução de iteração de executar para componentes de cor diferentes corresponde à iteração interna. Portanto, para cada entrada, três componentes de cor são atualizados. Além disso, as CurrentPaletteEntries da nova entrada de paleta são atualizadas conforme indicado pela Nota (9-3) e pela Nota (9-4), em que a instrução de iteração de executar para componentes de cor diferentes corresponde à iteração externa. Portanto, os valores de CurrentPaletteEntries são atualizados para cada componente de cor.
[092] Em uma modalidade, os valores de preditor de paleta para cada um dos três componentes podem ser agrupados. Mudanças exemplificativas ao processo existente são mostradas a seguir.
[093] A variável numComps é derivada conforme mostrado na equação (1). A variável CurrentPaletteEntries [cldx] [i] especifica o i-ésimo elemento na paleta atual para o componente de cor cldx e é derivada conforme mostrado pelos pseudocódigos exemplificativos a seguir na Tabela 10. TABELA 10.
[094] Conforme mostrado na Tabela 10, as CurrentPaletteEntries a partir do preditor de paleta são atualizadas conforme indicado na Nota (10-1) e na Nota (10- 2), em que a instrução de iteração de executar pa componentes de cor diferentes corresponde à iteração externa. Portanto, os valores de CurrentPaletteEntries são atualizados para cada componente de cor. As CurrentPaletteEntries de nova entrada de paleta são atualizadas conforme indicado na Nota (10-3) e na Nota (10- 4) permanecem as mesmas que na Tabela 9.
[095] Em outra modalidade, os três componentes podem ser agrupados. As mudanças são mostradas a seguir.
[096] A variável numComps é derivada conforme mostrado na equação (1):
[097] A variável CurrentPaletteEntries [cldx] [i] especifica o i-ésimo elemento na paleta atual para o componente de cor cldx e é derivada conforme mostrado pelos pseudocódigos exemplificativos a seguir na Tabela 11.TABELA 11.
[098] Conforme mostrado na Tabela 11, as CurrentPaletteEntries do preditor de paleta e aquelas da nova entrada de paleta são atualizadas conforme indicado na Nota (11-1), na Nota (11-2), na Nota (11-3) e na Nota (11- 4), em que a instrução de iteração de executar para componentes de cor diferentes corresponde à iteração externa. Portanto, os valores de CurrentPaletteEntries são atualizados para cada componente de cor.
[099] Vários exemplos de agrupamento da semântica de entrada de paleta do mesmo componente de cor para o processo de atualização foram mostrados na Tabela 10 e Tabela 11, em que elementos de sintaxe de HEVC foram usados para demonstrar o processo de atualização agrupando-se a semântica de entrada de paleta do mesmo componente de cor de acordo com uma modalidade da presente invenção. No entanto, a presente invenção não é limitada aos elementos de sintaxe específicos tampouco aos pseudocódigos específicos listados nesses exemplos. A pessoa versada no campo pode praticar a presente invenção sem se afastar do espirito da presente invenção.
[100] No SCM-4.0, os indices de paleta são agrupados na frente e os valores de escape são agrupados no fim. Os indices de paleta e os valores de escape são convertidos em código com binários de desvio. Agrupar os valores de escape com os indices de paleta (isto é agrupar binários convertidos em código de desvio) pode aumentar o rendimento de análise. No SCM-4.0, o número de valores de escape a ser analisado depende do modo de execução de paleta, do indicador de paleta e da execução de paleta. Portanto, os valores de escape podem ser agrupados apenas no fim. A fim de agrupar os valores de escape com indices de paleta, diversos métodos são revelados a seguir.
[101] Caso os valores de escape sejam agrupados na frente, o número de valores de escape a ser analisado poderia ser independente das execuções de paleta.de escape, a fim de remover a dependência de dados nas execuções de paleta, uma modalidade da presente invenção muda o modo de comportamento de execução Copiar Acima quando copia as amostras de escape da fila acima. Caso o preditor seja uma amostra de escape, a amostra de escape é tratada como um indicador de cor predefinido em modo de cópia de preditor.
[102] No modo de execução Copiar Acima, um valor de "execução de paleta" é transmitido ou derivado para indicar o número de amostras a seguir a serem copiadas da fila acima. Os indices de cor são iguais aos indices de cor na fila acima. Em uma modalidade, caso a amostra acima ou à esquerda seja uma amostra de escape, o indicador de cor da amostra acima é tratado como um indicador de cor predefinido (por exemplo, 0). O indicador atual é definido para o indicador predefinido. Nenhum valor de escape é exigido nesses modos de cópia de preditor. Nesse método, a execução de paleta pode ser sinalizada para o modo de execução de indicador mesmo se o indicador sinalizado for igual ao indicador de escape. Caso a execução para o indicador de escape seja maior do que 0 (por exemplo, N, N>0), a primeira amostra é reconstruída com o valor de escape convertido em código. O indicador da primeira amostra pode ser definido para o indicador de escape ou para o indicador de cor predefinido. 0 indicador das N amostras remanescentes é definido para o indicador predefinido (por exemplo, indicador 0) e as N amostras remanescentes são reconstruídas com o valor do indicador predefinido (por exemplo, indicador 0) . Em uma modalidade, o indicador de palavra de código máximo no modo de execução (por exemplo, adjustedlndexMax) é fixo (por exemplo, fixo para indexMax-1), exceto para a primeira amostra do modo de execução de indicador. Para a primeira amostra na CU, o adjustedlndexMax é igual a indexMax. A remoção de indicador redundante ainda pode ser aplicada.Nesse método, o número de valores de escape que precisa ser analisado depende do número de indices analisados/reconstruídos que são iguais ao indicador de escape. Por exemplo, caso os indices de paleta sejam convertidos em código com um código binário truncado e os binários convertidos em código sejam todos esses, o indicador analisado é o indicador de escape. 0 número de valores de escape que precisa ser analisado é independente das execuções de paleta. Portanto, a sintaxe de valores de escape pode ser colocada na frente (isto é, antes das execuções de paleta) com os indices de paleta.
[103] Exemplo de Ordem de Sintaxe 1: Número de copy_above_run ou número de index_run —> last_run_mode —> Grupo de tipo de execução (convertido em código de contexto) —> grupo de indicador de paleta (convertido em código de desvio) —> grupo de valor de escape (convertido em código de desvio) —* grupo de tamanho de execução.
[104] Nesse caso, o last_run_mode indica que o último modo de execução é copy_above_run ou index_run. Por exemplo, durante a conversão em código/decodificação de grupo de tipo de execução, caso o número de index_run codificado/decodifiçado seja igual ao número de index_run e o last run mode seja index_run, o grupo de tipo de execução será terminado. Caso o número de index_run codificado/decodifiçado seja igual ao número de index_run e o last_run_mode seja copy_above_run, o grupo de tipo de execução também será terminado, e o copy_above_run é inserido no fim.
[105] Exemplo de Ordem de Sintaxe 2: Número de copy_above_run ou número de index_run —* Grupo de tipo de execução (convertido em código de contexto) —■> last_run_mode —> grupo de indicador de paleta (convertido em código de desvio) —> grupo de valor de escape (convertido em código de desvio) —> grupo de tamanho de execução.
[106] Nesse caso, o last_run_mode indica que o último modo de execução é copy_above_run ou index_run. Por exemplo, durante conversão em código/decodificação de grupo de tipo de execução, caso o número de index_run codificado/decodifiçado seja igual ao número de index_run, o grupo de tipo de execução será terminado e um last_run_mode é sinalizado. Caso o last_run_mode seja copy_above__run, um copy_above_run é inserido no fim.
[107] Exemplo de Ordem de Sintaxe 3: Número de copy_above_run ou número de index_run —» Grupo de tipo de execução (convertido em código de contexto) —> grupo de indicador de paleta (convertido em código de desvio) —> grupo de valor de escape (convertido em código de desvio) —* last_run_mode —> grupo de tamanho de execução.
[108] Nesse caso, o last_run_mode indica que o último modo de execução é copy_above_run ou index_run. Por exemplo, durante a conversão em código/decodificação de grupo de tipo de execução, caso o número de index_run codificado/decodifiçado seja igual ao número de index_run, o grupo de tipo de execução será terminado. Um last_run_mode é sinalizado. Caso o last_run_mode seja copy_above_run, um copy_above_run é inserido no fim.
[109] Exemplo de Ordem de Sintaxe 4: Número de copy_above_run ou número de index_run —* Grupo de tipo de execução (convertido em código de contexto) —> grupo de indicador de paleta (convertido em código de desvio) —> last_run_mode —> grupo de valor de escape (convertido em código de desvio) —> grupo de tamanho de execução.
[110] Nesse caso, o last_run_mode indica que o último modo de execução é copy_above_run ou index_run. Por exemplo, durante a conversão em código/decodificação de grupo de tipo de execução, caso o número de index_run codificado/decodifiçado seja igual ao número de index_run, o grupo de tipo de execução será terminado. Um last_run_mode é sinalizado. Caso o last_run_mode seja copy_above_run, um copy_above_run é inserido no fim.
[111] Exemplo de Ordem de Sintaxe 5: Número de copy_above_run ou número de index_run —> grupo de indicador de paleta —> Grupo de valor de escape —> last_run_mode —> grupo de tipo de execução —> grupo de tamanho de execução.
[112] Nesse caso, o last_run_mode indica que o último modo de execução é copy_above_run ou index__run. Por exemplo, durante a conversão em código/decodificação de grupo de tipo de execução, caso o número de index_run codificado/decodifiçado seja igual ao número de index_run, o grupo de tipo de execução será terminado. Caso o last_run_mode seja copy_above_run, um copy_above_run é inserido no fim sem sinalização. Para o último modo de execução de paleta, é inferido que a execução de paleta seja no fim da PU/CU.
[113] Exemplo de Ordem de Sintaxe 6: Número de copy_above_run ou número de index_run —» grupo de indicador '°eN i de paleta —> last_run_mode —> Grupo de valor de escape —> Grupo de tipo de execução —> grupo de tamanho de execução.
[114] Nesse caso, o last_run_mode indica que o último modo de execução é copy_above_run ou indexjun. Por exemplo, durante a conversão em código/decodificação de grupo de tipo de execução, caso o número de index_run codificado/decodifiçado seja igual ao número de index_run, o grupo de tipo de execução será terminado. Caso o last_runmode seja copy_above_run, um copy_above_run é inserido no fim sem sinalização. Para o último modo de execução de paleta, é inferido que a execução de paleta seja no fim da PU/CU.
[115] Exemplo de Ordem de Sintaxe 7: Número de copy_above_ run ou número de index_run —> grupo de indicador de paleta —> Grupo de valor de escape —» last_run_mode —■> intercalados {tipo de execução de paleta, tamanho de execução de paleta} .
[116] Nesse caso, o last_run_mode indica que o último modo de execução é copy_above_run ou index_run. Por exemplo, durante a conversão em código/decodificação de grupo de tipo de execução, caso o número de index_run codificado/decodifiçado seja igual ao número de index_run, o grupo de tipo de execução será terminado. Caso o last run_mode seja copy_above_run, um copy_above_run é inserido no fim sem sinalização. Para o último modo de execução de paleta, é inferido que a execução de paleta seja no fim da PU/CU.
[117] Exemplo de Ordem de Sintaxe 8: Número de copy above_run ou número de index_run —> grupo de indicador de paleta —* last_run_mode —> Grupo de valor de escape —> intercalados {tipo de execução de paleta, tamanho de execução de paleta} .
[118] Nesse caso, o last_run_mode indica que o último modo de execução é copy_above_run ou index_run, Por exemplo, durante a conversão em código/decodificação de grupo de tipo de execução, caso o número de index_run codificado/decodifiçado seja igual ao número de index_run, o grupo de tipo de execução será terminado. Caso o last_run_mode seja copy_above_run, um copy_above_run é inserido no fim sem sinalização. Para o último modo de execução de paleta, é inferido que a execução de paleta seja no fim da PU/CU.
[119] Nos exemplos acima, copy_above_run corresponde a um elemento de sintaxe exemplificativo para o "modo de execução Copiar Acima" mencionado acima. Além disso, index_run corresponde a um elemento de sintaxe exemplificative para o "modo de execução".
[120] Nos exemplos 1, 2, 3 e 5 para a ordem de sintaxe mencionados acima, o "grupo de indicador de paleta (convertido em código de desvio) —► Grupo de valor de escape (convertido em código de desvio)" pode ser "intercalados {indicador de paleta, valores de escape}". O indicador de paleta e os valores de escape podem ser convertidos em código em uma maneira intercalada. Caso o indicador analisado seja igual ao indicador de escape, os valores de escape podem ser analisados imediatamente.
[121] Nos exemplos 2 a 7 para a ordem de sintaxe mencionados acima, o "last_run_mode" pode ser sinalizado após "Número de copy_above_run ou número de index_run".
[122] Nos exemplos 1 a 8 para a ordem de sintaxe mencionados acima, o ”last_run_mode" pode ser sinalizado em qualquer lugar antes da sinalização da última execução de paleta.
[123] Nos exemplos 1 a 4 para a ordem de sintaxe mencionados acima, o grupo de execução de paleta é decodificado antes do grupo de execução de paleta. Portanto, para a sinalização de execução de paleta sinalização, a execução possivel máxima pode ser subtraida adicionalmente pelo número de modos de execução de indicador restante, pelo número de modos de execução Copiar Acima remanescente ou pelo número de modos de execução de indicador remanescente + número de modos de execução Copiar Acima remanescente. Por exemplo, maxPaletteRun = nCbS *nCbS-scanPos-l-número de COPY_INDEX_MODE restante, ou maxPaletteRun = nCbS *nCbS- scanPos-l-número de COPY_ABOVE_MODE restante, ou maxPaletteRun = nCbS *nCbS-scanPos-l-número de COPY_ABOVE_MODE restante -número de COPY_INDEX_MODE restante. Nos exemplos acima, maxPaletteRun corresponde a um elemento de sintaxe exemplificativo para a execução de paleta máxima, nCbS corresponde a um elemento de sintaxe exemplificativo para o tamanho do bloco de conversão de luma em código atual e scanPos corresponde à posição de varredura de um pixel atual.
[124] Nos exemplos 1 a 7 para a ordem de sintaxe mencionados acima, para o último modo de execução de paleta, é inferido que a execução de paleta seja no fim da PU/CU. MÉTODO 2: Agrupamento dos indices de paleta no fim com valores de escape
[125] No SCM-4.0, a formação de contexto de execução de paleta depende do indicador de paleta. Portanto, o indicador de paleta pode ser convertido em código apenas antes da execução de paleta. A fim de agrupar o indicador de paleta no fim, a formação de contexto de execução de paleta deve ser independente do indicador de paleta.
[126] Portanto, a formação de contexto de execução de paleta precisa ser mudada para que a formação de contexto de execução de paleta dependa apenas do modo de execução de paleta atual, do modo de execução de paleta anterior, da execução de paleta anterior, do modo de execução de paleta da amostra acima, da execução de paleta da amostra acima ou da combinação das informações acima. Alternativamente, as execuções de paleta podem ser convertidas em código com binários de desvio.
[127] Vários exemplos de ordem de sintaxe de conversão de mapa de indicador de paleta em código são mostrados a seguir.
[128] Exemplo de Ordem de Sintaxe 1: Número de copy_above_run ou número de index_run —> last_run_mode —> Grupo de tipo de execução (convertido em código de contexto) —> grupo de tamanho de execução (não depende de indices de paleta) —* grupo de indicador de paleta (convertido em código de desvio) —> Grupo de valor de escape (convertido em código de desvio).
[129] Nesse caso, o last_run_mode indica que o último modo de execução é copy_above_run ou indexrun. Por exemplo, quando se converte em código/decodifica grupo o tipo de execução, caso o número de index_run codificado/decodifiçado seja igual ao número de index_run e o last_run_mode seja index_run, o grupo de tipo de execução será terminado. Caso número de index_run e o last__run_mode seja copy_above_run, o grupo de tipo de execução também será terminado e um copy_above_run é inserido no fim. Para o último modo de execução de paleta, é inferido que a execução de paleta seja no fim da PU/CU.
[130] Exemplo de Ordem de Sintaxe 2: Número de copy_above_run ou número de index run —» Grupo de tipo de execução —> last runjnode —> grupo de tamanho de execução —* grupo de indicador de paleta —» grupo de valor de escape.
[131] Nesse caso, o last_run_mode indica que o último modo de execução é copy_above_run ou index_run. Por exemplo, quando se converte em código/decodifica o grupo de tipo de execução, caso o número de index_run codificado/decodifiçado seja igual ao número de index_run, o grupo de tipo de execução será terminado e um last run_mode é sinalizado.Caso o last_run_mode seja copy_above_run, um copy_above_run é inserido no fim. Para o último modo de execução de paleta, é inferido que a execução de paleta seja no fim da PU/CU.
[132] Exemplo de Ordem de Sintaxe 3: Intercalados {tipo de execução de paleta, tamanho de execução de paleta}, grupo de indicador de paleta —> Grupo de valor de escape.
[133] Nos exemplos 1 a 3 para a ordem de sintaxe mencionada acima, o "grupo de indicador de paleta —* grupo de valor de escape" pode ser "intercalado {indicador de paleta, valores de escape}". O indicador de paleta e os valores de escape podem ser convertidos em código em uma maneira intercalada. Caso o indicador analisado seja igual ao indicador de escape, os valores de escape podem ser analisados imediatamente.
[134] Nos exemplos 1 a 3 para a ordem de sintaxe% mencionados acima, o "lastrun^mode" pode ser sinalizado em qualquer lugar antes da sinalização da última execução de paleta.
[135] Nos exemplos 1 e 2 para a ordem de sintaxe mencionados acima, o grupo de execução de paleta pode ser decodificado antes do grupo de execução de paleta. Portanto, para a sinalização de execução de paleta, a execução possivel máxima pode ser subtraida adicionalmente pelo número de modos de execução de indicador restante, pelo número de modos de execução Copiar Acima restante ou pelo número de modos de execução de indicador restante + número de modos de execução Copiar Acima restante. Por exemplo, maxPaletteRun = nCbS *nCbS-scanPos-l-número de COPY_INDEX_MODE restante, ou maxPaletteRun = nCbS * nCbS-scanPos-l-número de COPY_ABOVE_MODE restante, ou maxPaletteRun = nCbS * nCbS- scanPos-l-número de COPY_ABOVE_MODE restante -número de COPY_INDEX_MODE restante.
[136] Nos exemplos 1 e 2 para a ordem de sintaxe mencionados acima, para o último modo de execução de paleta, é inferido que a execução de paleta seja no fim da PU/CU.
[137] A presente invenção também endereça vários aspectos relacionados à conversão de paleta em código como revelado abaixo.
[138] No SCM-3.0, quatro elementos de sintaxe de mapa de indicador de paleta (isto é, modo de execução de paleta, indicador de paleta, execução de paleta e valores de escape) são convertidos em código em uma maneira intercalada. Embora a formação de contexto de modo de execução de paleta seja v 1 modificada para se tornar independente do modo de execução de paleta da amostra acima no SCM-4.0, a análise de mapa de indicador exige as informações da fila acima. Por exemplo, quando o modo de execução Copiar Acima é usado, o número de valores de escape a serem analisados depende do número de pixels de escape a serem copiados a partir das filas acima. Quando o modo de codificação anterior é o modo de execução Copiar Acima, a reconstrução de indicador também depende do indicador de paleta da amostra acima. A fim de economizar o armazenamento temporário de linha em análise de mapa de indicador de paleta, diversos métodos para remover a dependência de dados da amostra acima são revelados.
[139] A fim de remover a dependência durante o cálculo do número de pixels de escape a serem analisados no modo de execução Copiar Acima, o modo de comportamento de execução Copiar Acima é modificado, de acordo com uma modalidade da presente invenção, para copiar a amostras de escape da fila acima.
[140] No modo de execução Copiar Acima, um valor de "execução de paleta" é transmitido ou derivado para indicar o número de amostras a seguir a serem copiadas da fila acima. Os índices de cor são iguais aos índices de cor na fila acima. De acordo com uma modalidade, caso o preditor (isto é, a posição acima) seja uma amostra de escape, a amostra atual não apenas copia o indicador (o indicador de escape), mas também copia os valores de escape da fila acima. Não é exigido que nenhum valor de escape seja analisado nessas amostras. Nesse método, a execução pode ser sinalizada pará?^( o modo de execução de indicador mesmo se o indicador sinalizado for igual ao indicador de escape. Caso a execução para indicador de escape seja maior do que 0 (por exemplo, N e N>0), o decodificador preencherá o valor de reconstrução (ou os valores de escape) da primeira amostra para as N amostras a seguir. Os valores de escape podem ser sinalizados após a sintaxe de execução.
[141] Para remover a dependência de dados para a análise e reconstrução de indicador do modo de execução de indicador quando o modo anterior é modo de execução Copiar Acima, a remoção de indicador redundante é desabilitada quando o modo anterior for o modo de execução Copiar Acima conforme descrito no JCTVC-T0078 (JCTVC-T00784: Kim, et al. , CE1- related: simplification for index map coding in palette mode, Equipe de Colaboração Conjunta em codificação de video (JCT- VC) de ITU-T SG 16 WP 3 e ISO/IEC JTC 1/SC 29/WG 11, 20a Reunião: Genebra, CH, 10 a 18 de fevereiro de 2015, Documento: JCTVC-T0078).
[142] Com base no método 1, a análise de mapa de indicador não depende das informações da fila acima. O decodificador de entropia pode analisar todas as sintaxes de mapa de indicador de paleta apenas com o uso de dependência no modo de execução de paleta convertido em código e no indicador de paleta anteriores.
[143] Em uma modalidade, no modo de execução de indicador de cópia, um valor de "execução de paleta" é transmitido ou derivado para indicar o número de amostras a seguir a serem convertidas em código no fluxo de bits. O indicador de cor da posição atual é convertido em código. No entanto, caso a amostra na localização atual seja uma amostra de escape, não " / apenas o indicador (o indicador de escape) da amostra atual é convertido em código, mas os valores de escape também são convertidos em código. Nesse método, a execução pode ser sinalizada para o modo de execução de indicador mesmo se o indicador sinalizado for igual ao indicador de escape. Caso a execução para indicador de escape seja maior do que 0 (por exemplo, N, N>0), o decodificador preencherá o valor de reconstrução (ou os valores de escape) da primeira amostra para N amostras a seguir. Os valores de escape podem ser sinalizados após a sintaxe de execução.
[144] Para remover a dependência de dados para a análise e reconstrução de indicador do modo de execução de indicador de cópia quando o modo anterior é o modo de execução de indicador de cópia, a remoção de indicador redundante é desabilitada quando o modo anterior é o modo de execução de indicador de cópia.
[145] Com o método acima, a análise de mapa de indicador não depende das informações do indicador anterior. O decodificador de entropia pode analisar todas as sintaxes de mapa de indicador de paleta apenas com o uso da dependência no modo de execução de paleta convertido em código e indicador de paleta anteriores.
[146] No modo de execução Copiar Acima, um valor de "execução de paleta" é transmitido ou derivado para indicar o número de amostras a seguir a serem copiadas da fila acima.Os indices de cor são iguais aos indices de cor na fila à esquerda seja uma amostra de escape, o indicador de cor da amostra acima é tratado como um indicador de cor predefinido (por exemplo, 0). O indicador atual é definido para o indicador predefinido. Nenhum valor de escape é exigido nesses modos de cópia de preditor. De acordo com uma modalidade, a execução de paleta pode ser sinalizada para o modo de execução de indicador mesmo se o indicador sinalizado for igual ao indicador de escape. Os valores de escape podem ser sinalizados após a sintaxe de execução. Caso a execução para indicador de escape seja maior do que 0 (por exemplo, N, N>0), a primeira amostra é reconstruída com o valor de escape convertido em código. 0 indicador da primeira amostra pode ser definido para o indicador de escape ou para o indicador de cor predefinido. Os indices das N amostras remanescentes são definidos para o indicador predefinido (por exemplo, indicador 0) . As N amostras restantes são reconstruídas com o valor de indicador predefinido (por exemplo, indicador 0) . Em outro exemplo, caso a execução para indicador de escape seja maior do que 0 (por exemplo, N, N>0) , a primeira amostra é reconstruída com o valor de escape, e os valores de escape das N amostras a seguir também precisam ser sinalizados. As amostras remanescentes são reconstruídas com os valores de escape sinalizados respectivamente. Os Índices da primeira amostra e das N amostras remanescentes podem ser definidos para o indicador predefinido (por exemplo, indicador 0) .
[147] De acordo com o método 2, o indicador de palavra de código máximo no modo de execução (isto é, adjustedlndexMax) é fixo (por exemplo, fixo para indexMax- 1), exceto para a primeira amostra do modo de execução de indicador. Para a primeira amostra na CU, o adjustedlndexMax é igual a indexMax. A remoção de indicador redundante ainda pode ser aplicada.
[148] De acordo com o método 2, enquanto o mapa de reconstrução de indicador ainda precisa dos valores de indicador das amostras acima, o decodificador de entropia pode analisar todas as sintaxes de mapa de indicador de paleta apenas com o uso da dependência do modo de execução de paleta convertido em código e do indicador de paleta anteriores.
[149] De acordo com o JCTVC-T0078, a fim de remover a dependência de dados para a reconstrução de indicador do modo de execução de indicador quando o modo anterior é o modo de execução Copiar Acima, a remoção de indicador redundante será desabilitada quando o modo anterior for o modo de execução Copiar Acima.
[150] A presente invenção também endereça a questão relacionada à inversão de mapa de indicador antes da conversão de mapa de indicador em código. Após o decodificador inverter o mapa de indicador, a fonte de predição no modo de execução Copiar Acima não são os mesmos pixels fisicos acima como antes. A Figura 3A ilustra uma inversão de mapa de indicador exemplificativa antes da conversão de indicador em código. A Figura 3B ilustra um exemplo de mapa de indicador invertido.
[151] A Figura 3A mostra um exemplo de unidade de conversão em código original. Após a inversão de mapa de indicador, os pixels na última fila (isto é, Pixel 0 a Pixel 7) serão invertidos para a primeira fila conforme mostrado na Figura 3B. Os pixels da, agora, primeira fila, são preditos pelos pixels construídos contíguos (NCP) acima caso a predição possa ser através de uma CU. Na Figura 3B, os blocos preenchidos por linhas indicam o mapa de indicador invertido enquanto os blocos limpos na Figura 3A indicam o mapa de indicador original. Para pixels em outras filas após a inversão, a predição no modo de execução Copiar Acima se torna a predição pelas posições físicas de pixel abaixo antes da inversão. Nesse método, a reconstrução de indicador não precisa de uma segunda passada.
[152] No entanto, a inversão do mapa de indicador antes da conversão de mapa de indicador em código implica no uso do NCP acima para predizer os pixels na última fila em posição física conforme ilustrado na Figura 4. Esse processo de predição é ineficiente devido à distância entre preditor e o indicador subjacente a ser predito ser grande.
[153] Consequentemente, métodos para aprimorar a eficiência de conversão em código relacionada à inversão de mapa de indicador são revelados a seguir.
[154] Método 1: Se o mapa de indicador for invertido, os índices no modo de execução Copiar Acima são preditos a partir de sua posição física acima (ou posição à esquerda caso o sinalizador de transposição esteja ligado) conforme mostrado na Figura 5A e na Figura 5B. Na Figura 5A, os blocos preenchidos por linhas representam o mapa de indicador invertido enquanto os blocos limpos na Figura 5B representam o mapa de indicador original.
[155] Método 2: Sinalização de posição de início de varredura de execução diferente. Esse método é similar ao método 1, enquanto que os indices no modo de execução Copiar Acima são preditos a partir de pixels nas posições fisicas acima. Informações adicionais podem ser sinalizadas para indicar a "Posição de Inicio de Varredura de Execução" ou "Padrão de Varredura". A "Posição de Inicio de Varredura de Execução" pode ser superior à esquerda, superior à direita, inferior à esquerda ou inferior à direita. 0 "Padrão de Varredura" pode ser a varredura horizontal, varredura vertical, varredura transversal horizontal ou varredura transversal vertical.
[156] Método 3: Caso o mapa de indicador seja invertido, os pixels convertidos em código de execução Copiar Acima da primeira fila são preditos a partir das amostras em suas posições fisicas mais próximas conforme mostrado na Figura 6A e na Figura 6B. A Figura 6A mostra as amostras invertidas conforme indicado pelos blocos preenchidos por linhas e a Figura 6B mostra as amostras nas posições fisicas originais. Caso o sinalizador de transposição esteja desligado, os pixels convertidos em código de execução Copiar Acima da última fila na posição fisica são preditos a partir das amostras em suas posições fisicas mais próximas.
[157] Método 4: Caso o mapa de indicador seja invertido, os pixels convertidos em código de execução Copiar Acima da última fila são preditos a partir de suas posições físicas de pixel da CU contígua acima conforme mostrado na Figura 7A e na Figura 7B. A Figura 7A mostra os pixels invertidos conforme indicado pelos blocos preenchidos por linhas e a Figura 7B mostra as amostras nas posições físicas originais. Caso o sinalizador de transposição esteja desligado, a primeira fila (ou primeiras M filas) na posição física pode ser predita a partir de suas posições fisicas de pixel da CU contigua acima. M pode ser 1, 2 ou 3. M também pode depender do tamanho de CU. M pode ser sinalizado para que um decodificador possa decodificar adequadamente.
[158] A fim de aprimorar adicionalmente a eficiência de conversão em código, uma execução especial é revelada. Essa execução especial estende a execução Copiar Acima que começa a partir da primeira amostra de uma CU convertida em código de paleta. A execução especial pode ser sinalizada uma vez. As amostras no modo de execução Copiar Acima estendido são preditas a partir dos pixels reconstruídos na CU contigua. As amostras remanescentes nessa CU são convertidos em código com o uso da sintaxe de paleta especificada no SCM-4.0 ou no SCM-3.0, exceto pelo fato de que o total de amostras convertidas em código de paleta em uma PU/CU é reduzido.
[159] Método 1: Um elemento de sintaxe (por exemplo, line_num representado por L) é sinalizado primeiro para indicar que as primeiras L linhas de amostras são preditas a partir dos pixels reconstruídos na CU contigua, em que L é um número inteiro positivo. As amostras remanescentes são convertidas em código com o uso da sintaxe de paleta no SCM- 4.0 ou no SCM-3.0, exceto pelo fato de que o total de amostras convertidas em código de paleta em uma PU/CU é reduzido. Para as primeiras L linhas de amostras, seus valores de pixel são preditos a partir dos pixels reconstruidos na CU contigua. Por exemplo, caso palette_transpose_flag seja 0, os pixels reconstruídos nas CUs acima são usados. Os valores de pixel das primeiras L linhas de amostras são os valores de pixel reconstruídos da última fila das CUs acima. Isso é similar a aplicação da Intrapredição vertical para as primeiras L linhas de amostras, enquanto as linhas remanescentes são convertidas em código com modo de paleta normal.
[160] A Figura 8A ilustra um exemplo de modo de execução Copiar Acima estendido, em que duas linhas de pixels (isto é, L = 2) são copiadas a partir de uma linha acima que é localizada acima do limite de CU 810.
[161] Método 2: Um elemento de sintaxe (por exemplo, pixel_num representado por M) é sinalizado primeiro para indicar que as primeiras M amostras são preditas a partir dos pixels reconstruídos na CU contigua, em que M é um número inteiro positivo. As amostras remanescentes são convertidas em código com o uso da sintaxe de paleta no SCM-4.0 ou no SCM-3.0, exceto pelo fato de que o total de amostras convertidas em código de paleta em uma PU/CU é reduzido. Por exemplo, caso palette_transpose_flag seja 0, os pixels reconstruídos nas CUs acima são usados. Os valores de pixel das primeiras M amostras são os valores de pixel reconstruídos da última fila das CUs acima. Isso é similar à aplicação da Intrapredição vertical para as primeiras M amostras. Caso a largura de CU seja CU_width, as primeiras amostras de CU_width iniciando a partir da primeira amostra em (M+l) até a (M 4- CU_width) -ésima amostra na CU não podem ser convertidas em código no modo de execução Copiar Acima de acordo com a sintaxe no SCM-4.0. Em outras palavras, as amostras com a posição de varredura igual a M a (M + CU_width- 1) não podem ser convertidas em código no modo de execução Copiar Acima de acordo com a sintaxe no SCM-4.0. A Figura 8B ilustra um exemplo de predição através de uma CU sinalizando- se um elemento de sintaxe, pixel num (M) para indicar que as~~' f x. primeiras M (isto é, M=11) amostras são preditas a partir dos pixels reconstruidos.
[162] Por exemplo, a tabela de sintaxe para palette coding no SCM-3.d pode ser modificada conforme mostrado na Tabela 12.TABELA 12.
[163] Conforme mostrado na Tabela 12, o elemento de sintaxe pixel_num é incorporado conforme indicado pela Nota (12-1), em que o pixel_num é sinalizado antes da conversão de mapa de indicador de paleta em código. As amostras de paleta restantes são convertidas em código a partir da posição de varredura que inicia a partir de pixel_num conforme indicado pela Nota (12-2). A posição de amostra de paleta anterior é derivada de acordo com a Nota (12-3) . O modo sobre cópia não é permitido para a primeira fila de amostra após as primeiras amostras de pixel_num conforme indicado pela Nota (12-4).
[164] A variável adjustedlndexMax que representa o indicador máximo ajustado é derivada como o seguinte: adjustedlndexMax = indexMax se (scanPos > pixel_num) adjustedlndexMax - — 1
[165] A variável adjustedRefindexMax que representa o indicador de referência máximo ajustado é derivada como o seguinte: adjustedRefIndex — indexMax + 1 se (scanPos > pixel_num) { se (palette_run_type_flag [xcPrev] [ycPrev] ! = COPY_ABOVE_MODE) adjustedRefIndex = PalettelndexMap [xcPrev] [ycPrev] ou então adjustedRefIndex — PalettelndexMap [xC] [yC- 1]
[166] No método 1 e no método 2 mencionados acima, um elemento de sintaxe, copy_from_neighboring_CU_flag pode ser sinalizado primeiro. Caso o copy_f rom_neighboring__CU_f lag seja 0, o line_num e o pixel_num não são sinalizados e inferidos como 0. Caso o copy_from_neighboring_CU_flag seja 1, o line_num e o pixel_num são sinalizados. O line_num e o pixel_num reais são iguais ao line_num e ao pixel_num analisados aumentados por 1.
[167] Método 3: Nesse método, os pixels contiguos são usados para predizer o pixel atual convertido em código no modo de paleta. Num_copy_pixel_line é primeiro sinalizado para indicar que a primeiras num_copy_pixel_line linhas de amostras são preditas a partir dos pixels reconstruídosCU contigua. As amostras remanescentes são convertidas em código pela conversão de mapa de índice de paleta em código normal, exceto pelo fato de que o ponto de partida é mudado e o total de amostras convertido em código de paleta em uma PU/CU é reduzido.
[168] Para as primeiras num_copy_pixel_ line linhas de amostras, seus valores de pixel são preditos a partir dos pixels reconstruídos na CU contígua, em que o elemento de sintaxe, num_copy_pixel_line corresponde ao número de linhas pixel a serem copiadas. Por exemplo, caso palette_transpose_flag seja 0, os pixels reconstruídos nas CUs acima são usados, conforme mostrado na Figura 9A. Os valores de pixel das primeiras num_copy_pixel_line (por exemplo, K) linhas de amostras são preditos pelos valores de pixel reconstruídos da última fila da CU acima. Isso é similar a aplicação da Intrapredição vertical para as primeiras K linhas de amostras, enquanto as linhas remanescentes são convertidas em código com modo de paleta normal. Caso palette_transpose_flag seja 1, os pixels reconstruídos nas CUs à esquerda são usados, conforme mostrado na Figura 9B.
[169] A sintaxe de num_copy_pixel_line pode ser sinalizada após o sinalizador de modo de paleta e antes da conversão de tabela de paleta em código. Caso num_copy_pixel_line seja igual à largura de CU ou altura de CU, um palette_transpose_flag é sinalizado para indicar que a CU completa é predita a partir dos pixels acima ou dos pixels à esquerda. As sintaxes de conversão de tabela de paleta em código e conversão de mapa de índice em código são puladas uma vez que todas as amostras na CU atual são preditas.
[170] Caso num_copy_pixel_line seja menor do que a largura de CU ou a altura de CU, conversão de tabela de paleta em código normal e conversão de mapa de indice de paleta em código são aplicadas. No SCM-4.0, o palette_transpose_flag é inferida como 0, caso MaxPalettelndex seja igual a 0. No entanto, de acordo com o método atual, caso o MaxPalettelndex seja igual a 0 e num_copy_pixel_line não seja igual a 0, palette_transpose_flag ainda precisa ser sinalizado para indicar as primeiras num_copy_pixel_line filas ou colunas de amostras a serem preditas a partir dos pixels reconstruídos na CU acima ou na CU à esquerda. Para conversão de mapa de indice em código, a posição de amostra de partida é definida para num_copy_pixel_line*CU_width. Para as amostras com posições de amostra entre num_copy_pixel line*CU_width e (num_copy_pixel_line+l)*CU_width - 1, o modo de execução Copiar Acima não pode ser selecionado. Em outras palavras, as amostras com posições de amostra menores do que CU_width*(num_copy_pixel_line + 1) não podem ser sinalizadas como o modo de execução Copiar Acima.
[171] A Tabela 13 ilustra uma tabela de sintaxe exemplificativa de conversão de paleta em código, de acordo com uma modalidade do método revelado acima.TABELA 13.
[172] Na Tabela 13, o elemento de sintaxe, num_copy_pixel_line é incorporado na frente de todas as sintaxes conforme indicado pela Nota (13-1) . Caso num_copy_pixel_line seja igual ao nCbS (isto é, largura de CU ou altura de CU), a sintaxe de palette_transpose_flag é incorporada conforme indicado pela Nota (13-2). Os indices de paleta da CU completa são atribuídos como -1 conforme indicado pela Nota (13-3) , o que indica que os valores de pixel são copiados a partir da CU contigua. Caso o num_copy_pixel_line não seja igual a 0 e o MaxPalettelndex não seja maior do que 0 (por exemplo, MaxPalettelndex seja igual a 0), o elemento de sintaxe, palette_transpose_flag é incorporado conforme indicado pela Nota (13-4). Os indices de paleta das amostras dentro de num_copy_pixel_line linhas são atribuídos como -1 conforme indicado pela Nota (13-5) . O modo sobre cópia não é permitido para a primeira fila de amostra após o primeiro nCbS*num_copy_pixel_line conforme indicado pela Nota (13-6).
[173] A variável AdjustedMaxPalettelndex é derivada como o seguinte: AdjustedMaxPalettelndex = MaxPalettelndex se (PaletteScanPos > num_copy_pixel line*nCbS) AdjustedMaxPalettelndex - = 1
[174] A variável adjustedRefPalettelndex é derivada como o seguinte: adjustedRcfPalcticIndcx = MaxPalettelndex - I tf( PaletteScanPos > num copy pixel line* nCbS ) | xcPrev = x0 + travScan[ PaletteScanPos I ][<>] ycPrev = yO + iravScanJPaleUcScanPos - 1 ][ 1 ] if( palette run lype tlag[xcPrcv][ycPrev] != COPY ABOVE MODE ) { adjustedRcfPaletlelndcx PaleltelndcxMap[xcPrcv][ycPrev](7-80) } cise adjusledRefPaletielndex - PalellelndcxMapfxC][yC - I] }
[175] Caso PalettelndexMap [xC] [yC] seja igual a -1, o valor de pixel correspondente é o mesmo que seu pixel contiguo. De acordo com esse método, caso os pixels acima ou à esquerda não estejam disponíveis, (por exemplo, amostras em um limite de quadro ou amostras Interconvertidas em código quando restrição de Intrapredição é aplicada), em vez disso, a cor com indicador de paleta igual a 0 é usada. Caso a tabela de paleta da CU atual não seja convertido em código (por exemplo, num_copy_pixel_line é igual a CU_width), em vez disso, a primeira paleta na tabela de preditor de paleta é usada.
[176] Em outro exemplo, caso os pixels acima ou à esquerda não estejam disponíveis, o método de preenchimento de pixel de limite de Intrapredição de HEVC pode ser usado para gerar os pixels contíguos de substituição.
[177] 0 número de linhas que usam o modo linha de pixel sobre cópia pode ser derivado de acordo com o elemento de sintaxe, num_copy_pixel_line_indication em vez de ser sinalizado diretamente como num_copy_pixel_line. Caso num_copy_pixel_line_indication seja 0, num_copy_pixel_line é derivado como 0. Caso num_copy_pixel_line_indication seja 1, num_copy_pixel_ line é derivado como N, que é um número predefinido. Caso num_copy_pixel_line_indication seja k, num_copy_pixel_line é derivada como k*N.
[178] Método 4: Nesse método, a sintaxe de num copy_pixel_line é sinalizada antes da sintaxe de palette_transpose_flag. A Tabela 14 ilustra uma tabela de sintaxe de conversão de paleta em código exemplificativa de acordo com uma modalidade desse método.TABELA 14.
[179] Na Tabela 14, o elemento de sintaxe num_copy_jpixel_line é incorporado após a sinalização de sintaxe palette_escape_val_present_flag conforme indicado pela Nota (14-1). Caso o num_copy_pixel_line não seja igual a 0 e o MaxPalettelndex não seja maior do que 0 (por exemplo, MaxPalettelndex seja igual a 0), a sintaxe palette_transpose_flag é incorporada conforme indicado pela Nota (14-2) . Os indices de paleta das amostras dentro de num copy_pixel_line linhas são atribuídas como -1 conforme indicado pela Nota (14-3) . O modo sobre cópia não é permitido para a primeira fila de amostra após o primeiro nCbS*num_copy_pixel_line conforme indicado pela Nota (14-4) .
[180] O elemento de sintaxe, num_copy_pixel_line pode ser sinalizado na frente do elemento de sintaxe, palette_escape_val_present_flag. A Tabela 15 ilustra uma tabela de sintaxe exemplificativa para conversão de paleta em código de acordo com esse método.TABELA 15.
[181] Na Tabela 15, o elemento de sintaxe, num copy pixel_line é incorporado antes da sinalização de sintaxe palette_escape_valj>resent_flag conforme indicado pela Nota (15-1). Caso o num_copy_pixel_line não seja igual a 0 e o MaxPalettelndex não seja maior do que 0 (por exemplo, MaxPalettelndex seja igual a 0), a sintaxe palette_transpose_flag é incorporada conforme indicado pela Nota (15-2) . Os índices de paleta das amostras dentro de num_copy_pixel_line linhas são atribuídas como -1 conforme indicado pela Nota (15-3) . 0 modo sobre cópia não é permitido para a primeira fila de amostra após o primeiro nCbS*num_copy_pixel_líne conforme indicado pela Nota (15-4).
[182] Nessa modalidade, caso o elemento de sintaxe, num copy_pixel_line seja igual a CU_width, os elementos de sintaxe, NumPredictedPaletteEntries e num_signaled_palette_ entries devem ambos ser 0. O primeiro elemento de sintaxe convertido em código, palette_predictor_run deve ser 1.
[183] No projeto de sintaxe de sinalização num_copy_pixel_line antes de palette escape_val_present _flag (por exemplo, Tabela 15), NumPredictedPaletteEntries e num_signaled_palette_entries devem ambos ser 0, o primeiro palette_predictor_run convertido em código deve ser 1, e o palette_escape_val_present_flag é inferido como 0.
[184] Método 5: De acordo com esse método,num_copy_pixel_line é sinalizado após palette_transpose_ flag. Nesse projeto de sintaxe, o elemento de sintaxe, palette_transpose_flag precisa ser sinalizado mesmo quando o MaxPalettelndex for igual a 0. A Tabela 16 ilustra uma tabela de sintaxe exemplificativa para conversão de paleta em código, de acordo com uma modalidade desse método.TABELA 16.
[185] Uma vez que o elemento de sintaxe, palette_transpose_flag precisa ser sinalizado mesmo quando o MaxPalettelndex for igual a 0, a sintaxe é incorporada (conforme mostrado na Nota (16-1)) fora do teste "if (MaxPalettelndex > 0)". Ao mesmo tempo, o elemento de sintaxe, palette_transpose_flag dentro do teste "if (MaxPalettelndex > 0)" é deletado conforme indicado pelo texto rasurado na Nota (16-2) . O elemento de sintaxe num_copy_pixel_line é incorporado conforme indicado pela Nota (16-3) . Os indices de paleta das amostras dentro de numcopy_pixel line linhas são atribuidos como -1 conforme indicado pela Nota (16-4).
[186] Caso num_copy_pixel_line seja um número par, é natural usar a varredura da esquerda para a direita para a primeira linha normal, conforme mostrado na Figura 10A. No entanto, caso o num_copy_pixel_line seja um número impar, há dois tipos de varreduras para escolher. Um é a varredura da esquerda para a direita para a primeira linha normal conforme mostrado na Figura 10B e o outro é a varredura da direita para a esquerda para a primeira linha normal conforme mostrado na Figura 10C.
[187] Na Figura 10B, é similar a mover a varredura transversal para baixo ou usar a transversal a partir da primeira linha normal. Na Figura 10C, é similar a usar a varredura transversal a partir da primeira amostra na CU atual e pular a varredura para as num_copy_pixel_line linhas. Nas Tabelas 13 a 16, a varredura na Figura 10C é usada. A tabela de sintaxe pode ser modificada adequadamente para a varredura na Figura 10B.
[188] Método 6: A Tabela 17 ilustra uma tabela de sintaxe exemplificativa para a conversão de paleta em código para a varredura na Figura 10B. TABELA 17.
[189] Na Tabela 17, o elemento de sintaxe, Oé>/v j num_copy_pixel_line é incorporado na frente de todas as sintaxes conforme indicado pela Nota (17-1) . Caso o num_copy_pixel_line seja igual ao nCbS (isto é, a largura de CU ou a altura de CU) , a sintaxe palette__transpose_flag é incorporada conforme indicado pela Nota (17-2) . Os indices de paleta da CU completa são atribuídos para -1 conforme indicado pela Nota (17-3) , o que indica que os valores de pixel são copiados a partir da CU contigua. Caso o num__copy_pixel_line não seja igual a 0 e o MaxPalettelndex não seja maior do que 0 (por exemplo, MaxPalettelndex seja igual a 0), a sintaxe palette_transposeflag é incorporada conforme indicado pela Nota (17-4) . Os indices de paleta das amostras dentro de num_copy_pixel_line linhas são atribuídos para -1 conforme indicado pela Nota (17-5). O PaletteScanPos é reinicializado para 0 conforme indicado pela Nota (17-6) . Uma vez que o PaletteScanPos é reinicializado, os indices de amostra reais precisam ser aumentados por num_copy_pixel_line*nCbS conforme indicado pelas Notas (17- 7 e 17-10 a 17-12). A posição vertical precisa ser aumentada por num_copy_pixel_line conforme indicado pelas Notas (17— 8, 17-9 e 17-13).
[190] A variável AdjustedMaxPalettelndex é derivada como o seguinte: AdjustedMaxPalettelndex = MaxPalettelndex se (PaletteScanPos > 0) AdjustedMaxPalettelndex - = 1
[191] A variável adjustedRefPalettelndex é derivada como o seguinte: adjustcdRcfPalcUcIndcx = MaxPalettelndex + I iff PaletteScanPos > 0) { il‘( palcltcruntypcJlag[xcPrcv][ycPrcv] != COPY ABOVE MODE ) { xcPrev - xO * iravScan[PaleitcScanPos - I ][0] ycPrcv yO * travSeanj PalcttcScanPos - l|[l] * num copy_pixcl line adjustcdRcfPalcitcIndcx - PalcticlndexMap[xcPrcv][ycPrc\ ](7-80) else adjustcdRcfPalcttcIndcx = PalcttclndcxMap[xCJ[yC - 1]
[192] Deve ser observado que, no Método 3 ao Método 6 mencionados acima, a sinalização de num_copy_pixel_line também pode ser estruturada com o uso dos elementos de sintaxe de palette_run e do contexto na Especificação de SCC de HEVC existente. Por exemplo, a mesma pode ser sinalizada conforme mostrado na Tabela 18. TABELA 18.
[193] Na Tabela 18, com a sintaxe acima, o copy_pixel_line_length decodificado pode ser semanticamente o número de linhas de pixel de cópia. 0 valor máximo desse elemento convertido em código é altura de bloco-1.
[194] 0 tamanho de copy_pixel_line decodificado também pode ser o número real de amostras que usam o modo de pixel de cópia, e o número de linhas de pixel de cópia é derivado como tamanho de copy_pixel_line/block_width. Deve ser observado que nesse método, uma restrição de conformidade é imposta sobre o tamanho de copy_pixel_line de modo que o mesmo tem que ser múltiplo de block_width.
[195] Método 7: Nesse método, a indicação de que o bloco começa com o modo de pixel de cópia de fora da CU atual, e o número de linhas (número de amostras) que usam o modo de pixel de cópia é sinalizado com o uso da estrutura de sintaxe atual com processo de decodificação modificado. Por exemplo, isso pode ser alcançado como o seguinte: • Permitir o modo de execução Copiar Acima para a primeira amostra no bloco. Isso é indicado com o uso do elemento de sintaxe palette_run_type_flag[0][0]. Caso palette_run_type_flag[0][0] seja 1, as linhas a seguir usam pixel de cópia para preencher as amostras com o número de linhas sinalizado. Caso palette_run_type_flag[0][0] seja 0, a sinalização de sintaxe remanescente permanece a mesma que a estrutura de sintaxe atual. • Quando palette_run_type_flag[0] [0] é 1, o número de linhas que usam pixel de cópia é sinalizado com o uso dos mesmos elementos de sintaxe para sinalização de tamanho de execução de paleta. Há duas formas para sinalizar o número de linhas com o uso da sintaxe de tamanho de execução de paleta. o o tamanho de execução de paleta decodificado R para o modo de pixel de cópia significa semanticamente o número de linhas (não o número de amostras). Portanto, a real execução de pixel de cópia é o valor decodificado de R*block_width para a varredura horizontal, ou de R*block height para a varredura vertical. O valor máximo desse R decodificado deve ser a altura de bloco (ou largura). o O outro método é que o tamanho de execução de paleta decodificado R é a execução de pixel de cópia i real. Esse método não exige mudar a semântica e processo de decodificação para a execução de pixel de cópia.
[196] Deve ser observado que, para esse método, uma restrição de conformidade tem que ser imposta sobre o valor decodificado R, de modo que o mesmo precise ser múltiplo de block_width. • Quando palette_run_type_flag [0] [0] é 1, e após as linhas de pixel de cópia, a próxima linha de amostras não pode usar o modo de execução Copiar Acima. O critério de análise é modificado de acordo com essa condição para não analisar o sinalizador de run_type para essa linha. • Quando palette_run_type_flag[0][0] é 0, as amostras remanescentes na primeira linha não podem usar o modo de execução Copiar Acima. 0 critério de análise é modificado de acordo com essa condição para não analisar o sinalizador de run_type para essas amostras.
[197] A Tabela 19 ilustra uma tabela de sintaxe exemplificativa para a conversão de paleta em código de acordo com esse método. A conversão em código de "tamanho de execução de paleta R" para o modo de pixel de cópia significa semanticamente o número de linhas (não o número de amostras) . TABELA 19.
[198] Na Tabela 19, uma vez que o elemento de sintaxe, palette_transpose_flag precisa ser sinalizado mesmo quando o MaxPalettelndex é igual a 0, a sintaxe é incorporada (conforme mostrado na Nota (19-1)) fora do teste "if (MaxPalettelndex > 0)". Ao mesmo tempo, o elemento de sintaxe, palette_transpose_flag dentro do teste "if (MaxPalettelndex > 0)" é deletado conforme indicado pelo texto rasurado na Nota (19-2). Os índices de paleta da CU completa são primeiro reinicializados para -1 conforme indicado pela Nota (19-3) , o que indica que os valores de pixel são copiados da CU contígua. Palette_run_type_flag e paletteRun para a primeira amostra (PaletteScanPos = = 0) são usados para indicar o num_copy_pixel_line. Conforme indicado pela Nota (19-5), para a primeira amostra, caso o palette_run_type_flag seja igual a COPY_ABOVE_MODE, o maxPaletteRun é definido igual a nCbS - 1 conforme indicado pela Nota (19-4), e o num_copy_pixel_line é igual ao paletteRun decodificado. Caso contrário, o num_copy_pixel_line é definido para 0.
[199] A Tabela 20 ilustra outra tabela de sintaxe exemplificativa para a conversão de paleta em código de acordo com esse método. A conversão em código de "tamanho de execução de paleta R" para o modo de pixel de cópia é o tamanho de execução real, e a restrição de conformidade é imposta para que R precise ser múltiplo de CU_width.TABELA 20.
[200] Na Tabela 20, uma vez que o elemento de sintaxe, palette_transpose_flag precisa ser sinalizado mesmo quando o MaxPalettelndex é igual a 0, a sintaxe é incorporada (conforme mostrado na Nota (20-1)) fora do teste "if (MaxPalettelndex > 0)". Ao mesmo tempo, o elemento de sintaxe, palette_transpose_flag dentro do teste (MaxPalettelndex > 0)" é deletado conforme indicado pelo texto rasurado na Nota (20-2) . Os índices de paleta da CU completa são primeiro reinicializados para -1 conforme indicado pela Nota (20-3) , o que indica que os valores de pixel são copiados da CU contígua. O palette_run_type_flag e paletteRun para a primeira amostra (PaletteScanPos == 0) são usados para indicar o num_copy_pixel_line. Conforme indicado pela Nota (20-4), para a primeira amostra, caso o palette_run_type_flag seja igual a COPY_ABOVE_MODE, o num_copy_pixel_line é igual ao paletteRun/nCbs decodificado. Deve ser observado que nessa situação, uma restrição de conformidade é imposta no paletteRun de modo que o mesmo tenha que ser múltiplo de nCbs. Caso contrário (isto é, o palette_run_type_flag não é igual a COPY_ABOVE_MODE), o num__copy_pixel_line é definido para 0.
[201] Método 8: De acordo com esse método, apenas num_copy_pixel_line = 0 ou CU_width é testado. Uma diminuição no modo de paleta é fornecida introduzindo-se um novo elemento de sintaxe, pred_from_neighboring_pixels. Caso pred_from_neighboring_pixels seja 1, palette_transpose_flag é sinalizado.
[202] Caso pred_from_neighboring_pixels seja 1, e o palette_transpose_flag seja 0, todas as amostras são preditas a partir dos pixels da CU acima. Caso pred_from_neighboring_pixeis seja 1, e o palette_transpose_flag seja 1, todas as amostras são preditas a partir dos pixels da CU à esquerda. Caso os pixels contíguos estejam indisponíveis, há duas formas para gerar os pixels de substituição. De acordo com a primeira abordagem, o método de geraçao de pixel de residuo em código. De acordo com a segunda abordagem, em vez disso, a cor com o indicador de paleta igual a 0 é usada. Caso a tabela de paleta da CU atual não seja convertida em código (por exemplo, num_copy_pixel_line igual a CU_width), em vez disso, a primeira paleta na tabela de preditor de paleta é usada.
[203] A Tabela 21 ilustra uma tabela de sintaxe exemplificativa para a conversão de paleta em código de acordo com esse método.TABELA 21.
[204] Na Tabela 21, o elemento de sintaxe, sintaxe de pred_from_neighboring_pixels é incorporado conforme indicado pela Nota (21-1). Caso o pred_from_neighboring_pixels seja verdadeiro, palette_transpose_flag é incorporado e os indices de paleta da CU completa são definidos para -1, conforme indicado pela Nota (21-2).
[205] No Método 3 ao Método 8, apenas um palette transpose_flag é sinalizado. Caso palette_transpose_flag seja igual a 0, o modo de pixel de cópia vertical é a varredura horizontal de indicador o pixel de cópia horizontal é usado primeiro e, então, varredura vertical de indicador é usada.
[206] Alternativamente, dois sinalizadores de transposição, tais como palette_copy_pixel_transpose_flag e palette_scan_transpose_flag podem ser sinalizados. O palette_copy_pixel_transpose flag indica a direção do modo de pixel de cópia a partir da CU contígua. O palette_scan_transpose_flag indica a direção de varredura de paleta. Por exemplo, palette_copy_pixel_transpose_flag igual a 0 significa o pixel de cópia a partir da CU acima e palette_copy_pixel_transpose_flag igual a 1 significa o modo de pixel de cópia a partir da CU à esquerda. Palette_scan_transpose_flag igual a 0 significa que a varredura horizontal é usada e 1 significa que a varredura vertical é usada.
[207] Por exemplo, na Figura 11A, palette_copy_pixel__ transpose_f lag é 0 e palette__scan_transpose_f lag é 0. Na Figura 11B, palette_copy_pixel_transpose_flag é 0 e palette_ scan_transpose_flag é 1. Na Figura 11C, palette_copy_pixel _transpose_flag é 1 e palette_scan_transpose_flag é 0.
[208] De acordo com uma modalidade, a predição através de uma CU pode ser aplicada com a varredura transversal reversa e varredura transversal girada. A Figura 12A ilustra um exemplo de predição através de uma CU com uma varredura transversal reversa, e a Figura 12B ilustra um exemplo de predição através de uma CU com uma varredura transversal girada. A posição de varredura da conversão de mapa de indicador em código normal para ambas as varreduras começa de 0 e termina em nCbS*nCbS-num_copy_pixel_line*nCbS -1. Para as amostras remanescentes com posições de amostra iguais ou maiores do que nCbS*nCbS - num_copy_pixel_line*nCbS, o PalettelndexMax[xC][yC] é definido igual a -1, o que significa que seu valor de pixel é o mesmo que dos pixels contiguos.
[209] 0 elemento de sintaxe, num_copy_pixel_line pode ser binarizado com o uso de código Exponential-Golomb com ordem K (código EG-K) , código Exponential-Golomb truncado com ordem K (código EG-K truncado), código Unário truncado de N- bits + código EG-K, ou o mesmo método de binarização usado em execução de paleta (binarizado para palette_run_msb _id_plusl e palette_run_refinement_bits).
[210] Os binários de contexto podem ser usados para conversão em código de num_copy_pixel_line. Por exemplo, pode-se usar o mesmo método de binarização usado na execução de paleta para num_copy_pixel_line. Os primeiros N bits de palette _run_msb_id_plusl podem usar binários convertidos em código de contexto. Por exemplo, N pode ser 3. Os binários remanescentes são convertidos em código em binários de desvio. Os contextos podes ser compartilhados com conversão de execução de paleta em código. Por exemplo, os contextos podem ser compartilhados com o modo de execução Copiar Acima estendido.
[211] Uma vez que as probabilidades de num copy pixel line ser igual a CU_width e 0 são maiores do que a probabilidade de num copy_pixel_line ser outros números, a binarização de código é modificada a fim de reduzir a palavra de código de num_copy_pixel_line que é igual a CU width. Por exemplo, o valor de CU_width pode ser inserido antes de um número P (por exemplo, 1) na tabela de palavra de código para binarização. 0 valor de num_copy_pixel_line que é igual ou maior do que P será aumentado por 1 no lado de codificador. No lado de decodificador, caso a palavra de código analisada seja P, isso significa que o num_copy_pixel_line é igual a CU_width. Caso a palavra de código analisada seja menor do que P, o num_copy_pixel_line é igual à palavra de código analisada. Caso a palavra de código analisada seja maior do que P, o num_copy_pixel_line é igual à palavra de código analisada menos 1.
[212] Em outra modalidade, dois bits adicionais são usados para indicar se num_copy_pixel_line é igual a 0, CU_width, ou outro número. Por exemplo, "0" significa que num_copy_pixel_line é igual a 0, ”10" significa que num_copy_pixel_line é igual a CU_width, e ”11 +palavra de código-L" significa que num_copy pixelline é igual a L+l.
[213] Em outra modalidade adicional, dois bits adicionais são usados para indicar se o num_copy_pixel_line é igual a 0, CU_width, ou outro número. Por exemplo, ”0" significa que num_copy_pixel_line é igual a CUwidth, ”10" significa que num_copy_pixel_line é igual a 0, e ”11 +palavra de código- L" significa que num_copyj?ixel_line é igual a L+l.
[214] Para o Método 4 ao Método 7 mencionados na Predição através de uma seção de CU, o num_copy_pixel_line é sinalizado após a conversão de tabela de paleta em código. A binará zação de num_copy_pixel_line pode ser modificada de acordo com as informações decodificadas da conversão de tabela de paleta em código. Por exemplo, caso NumPredictedPaletteEntries e num_signaled_palette_entries sejam todos 0, isso significa que pelo menos uma fila/coluna de amostras é convertida em código com modo de paleta normal. Portanto, num_copy_pixel_line não deve ser igual a CU_width. Consequentemente, a faixa de palavra de código de num_copy_pixel_line é limitada a ser de 0 a (CU_width -1) . Por exemplo, caso o código Exponential-Golomb truncado com ordem K (código EG-K truncado), código Unário truncado de N- bits + código EG-K, ou o mesmo método de binarização usado na execução de paleta é usado para a conversão em código de num_copy_pixel_line, de cMax, de maxPaletteRun, ou é definido que o valor máximo possivel seja CU_width -1. O método de binarização usado para a execução de paleta binarizará a execução de paleta para palette_run_msb_id_plusl e paletterun_refinement_bits.
[215] Em outra modalidade, o método de busca para determinar o número de linhas de pixel de cópia (isto é, num_copy_pixel_line) é revelado.
[216] Método 1: No lado de codificador, o valor de num_copy_pixelline é determinado. As primeiras colunas/filas de num_copy_pixel_line são preditas a partir dos pixels contiguos. As amostras remanescentes são usadas para derivar as paletas para as amostras restantes e o mapa de indicador.
[217] : No lado de codificador, as amostras da CU completa são usadas para derivar as primeiras paletas. De acordo com essa tabela de paleta, um processo de otimização de distorção de taxa (RDO) pode ser usado para determinar o melhor valor de num_copy_pixel_line. A interpolação pode ser usada para estimar o custo de bit de num_copy_pixel_line diferente. Por exemplo, caso o custo de bit para num_copy_pixel_line = 0 seja RO e o CU_width seja 16, o custo de bit para num_copy_pixel_line = 3 é igual a RO* (CU_width -3) /CU_width (isto é, 13/16*R0).
[218] Após o num_copy_pixel_line ser determinado, as primeiras colunas/filas de num_copy_pixel_line são preditas a partir dos pixels contíguos. As amostras remanescentes são usadas para rederivar as paletas para as amostras remanescentes e o mapa de indicador.
[219] Na seção anterior, um pixel de cópia baseada em fila de CU contígua é revelado para conversão de modo de paleta em código. Um elemento de sintaxe, num_copy_pixel_row que representa o número de filas de pixel de cópia é sinalizado primeiro para indicar as primeiras linhas de num_copy_pixel__row de amostras a serem preditas a partir dos pixels reconstruídos na CU contígua. 0 conceito similar pode ser aplicado a outros modos, tais como modo Inter, modo Intra e modo IntraBC.
[220] Em uma modalidade, o pixel de cópia baseada em fila de CU contígua é aplicado ao modo Inter e/ou ao modo Intra PU ou CU. Um elemento de sintaxe, num_copy_pixel_row é sinalizado primeiro. Caso o num_copy_pixel_row não seja igual a 0, um elemento de sintaxe, copy_pixel_row_direction _flag é sinalizado para indicar a direção de filas de pixel de cópia. Caso copy_pixel_row_direction_flag seja 0, num_ copy_pixel_row indica as primeiras filas de num_copy_pixel_row de amostras a serem preditas a partir dos pixels reconstruídos nas CUs acima. Caso copy_pixel_row_ direction_flag seja 1, num_copy_pixel_row indica as primeiras colunas de num_copy_pixel_row de amostras a serem preditas a partir dos pixels reconstruídos nas CUs à esquerda. Por exemplo, a Figura 13 ilustra um exemplo de uma CU 8x8 convertida em código no modo Inter. 0 valor de num_copy_pixel_row dessa CU é 3 e o copy_pixel_row_direction _flag dessa CU é 0. Os preditores nas três filas superiores são substituídos pelos valores de pixel reconstruídos da última fila das CUs acima. Os pixels restantes são preditos pelo modo Inter original. Isso é similar a realizar a predição de modo Inter para a CU/PU completa, e, então, substituir as primeiras filas ou colunas de num_copy_pixel_row pelos pixels contíguos.
[221] A construção de pixel contiguo de Intrapredição pode ser usada para gerar os pixels de referência contíguos. Caso o pixel contiguo não esteja disponível (por exemplo, fora do limite da imagem) , o método de preenchimento de pixel de referência em Intrapredição pode ser aplicado para gerar os pixels de referência contíguos. 0 filtro de suavização em Intrapredição pode ser aplicado ou desligado.
[222] Os elementos de sintaxe, num_copy_pixel_row e copy_pixel_row_direction_flag podem ser sinalizados em nivel de CU ou em nivel de PU. Num_copy_pixel_row e copy pixel_row_direction_flag podem ser sinalizados na frente da CU ou da PU, ou podem ser sinalizados no meio da CU ou da PU, ou podem ser sinalizados no fim da CU ou da PU. Por exemplo, caso num_copy_pixel_row e copy_pixel_row_direction_flag sejam sinalizados no nivel de CU e sinalizados directionflag podem ser sinalizados antes de partjnode. A palavra de código de part_mode pode ser mudada adaptativamente de acordo com o valor do num_copy_pixel_row e do copy_pixel_row_direction_flag. Por exemplo, caso o copy_pixel_row_direction_flag seja 0 e o num_copy_pixel_row seja igual ou maior do que CU_height/2, o PART_2NxN e o PART_2NxnU não são válidos. A binarização de palavra de código de part_mode é modificada. Por exemplo, caso o PART_2NxN e o PART_2NxnU sejam removidos, a binarização de part_mode é mostrada na Tabela 22.TABELA 22.
[223] Na Tabela 22, os textos com fundo escuro correspondem a textos deletados. Em outro exemplo, caso num_copy_pixel_row e copy_pixel_row_direction_flag sejam sinalizados em nivel de CU e sinalizados no fim da CU ou no e/v i meio da CU, num_copy_pixel_row e copy_pixel_row_direction _flag podem ser sinalizados após part_mode. Após o part_mode ser recebido, o valor de num_copy_pixel_row e de copy_pixel_row_direction_flag pode ser restringido. Por exemplo, caso o part_mode seja PART_2NxN e o copy_pixel _row_direction_flag seja 0, o valor de num_copypixel_row é restringido para a faixa a de 0 a CU_height/2.
[224] Em modo Intra, caso num_copy_pixel_row não seja 0, os pixels de referência contiguos podem ser os mesmos que os pixels derivados de HEVC. Isso é o mesmo que realizar a Intrapredição para a PU, e, então, substituir as primeiras diversas filas ou colunas pelos pixels da CU contigua.
[225] Em outra modalidade, caso num_copy_pixel_row não seja 0, as posições dos pixels de referência contiguos são mudadas. A Figura 14 e a Figura 15 ilustram exemplos de mudança das posições dos pixels de referência contiguos de acordo com essa modalidade. Na Figura 14 e na Figura 15, num_copy_pixel_row é 3 e copy_pixel_row_direction_flag é 0. Os pixels de referência superiores e pixels de referência superiores à esquerda são deslocados para a terceira fila. Na Figura 14, os pixels de referência superiores à direita são copiados da CU superior à direita. Na Figura 15, os pixels de referência superiores à direita são copiados dos pixels mais à direita da terceira fila.
[226] De acordo com uma modalidade, caso num_copy_pixel _row seja N e copy_pixel_row_direction_flag seja 0, as N filas superiores são preditas a partir da CU contigua.. remanescente das N filas superiores podem ser restringidos para ser 0. De acordo com outra modalidade, o residuo das N filas superiores podem ser sinalizados. Para modo Inter, a árvore quadrática de residuo de HEVC é aplicada.
[227] O num_copy_pixel_row pode ser binarizado com o uso de código Exponential-Golomb com ordem K (código EG-K), código Exponential-Golomb truncado com ordem K (código EG-K truncado), código Unário truncado de N-bits + código EG-K, ou o mesmo método de binarização usado em execução de paleta (isto é, ser binarizado para palette_run_msb_id_plusl e palette_run_refinement_bits).
[228] Os binários de contexto podem ser usados para conversão em código de num_copy_pixel_row. Por exemplo, pode ser usado o mesmo método de binarização que aquele para num_copy_pixel_row na conversão de execução de paleta em código. Os primeiros N bits de palette_run_msb_id_plusl podem usar binários de contexto convertidos em código. Por exemplo, N pode ser 3. Os binários restantes são convertidos em código em binários de desvio. Os contextos podem ser compartilhados com conversão de execução de paleta em código. Por exemplo, os contextos podem ser compartilhados com o modo de execução Copiar Acima estendido.
[229] Uma vez que as probabilidades de num_copy_pixel_row ser igual a CU^width e 0 são superiores à probabilidade de num copy pixel row ser outros números, a binarização de código pode ser modificada para reduzir a palavra de código de num_copy_pixel row par ser igual a CU_width. Por exemplo, o valor para CU_width pode ser inserido antes de um número M (por exemplo, 1) na tabela de palavra de código. 0 valor । de num_copy _pixel_row que é igual ou maior do que M será aumentado por 1 no lado de codificador. No lado de decodificador, caso a palavra de código analisada seja M, isso significa que num_copy_pixel_row é igual a CU_width. Caso a palavra de código analisada seja menor do que M, o num_copy_pixel_row é igual à palavra de código analisada. Caso a palavra de código analisada seja maior do que M, num_copy_pixel_row é igual à palavra de código analisada menos 1.
[230] De acordo com outra modalidade, dois bits adicionais são usados para indicar se num_copy_pixel_row é igual a 0, CU_width ou outro número. Por exemplo, "0" significa que num_copy_pixel_row é igual a 0, ”10" significa que num_copy_pixel_row é igual a CU_width e ”11 + palavra de código-L" significa que num_copy_pixel_row é igual a L+l. Em outro exemplo, ”0" significa que num_copy_pixel_row é igual a CU_width, ”10" significa que num_copy_pixel_row é igual a 0 e ”11 + palavra de código-L" significa que num_copy_pixel _row é igual a L+l.
[231] Para o Método 4 ao Método 7 mencionados na seção de Predição através de uma CU, num_copy_pixel_row pode ser sinalizado após a conversão de tabela de paleta em código. A binarização de num_copy_pixel_row pode ser modificada de acordo com as informações decodificadas da conversão de tabela de paleta em código. Por exemplo, caso NumPredictedPaletteEntries e num_signaled_palette_entries sejam todos 0, isso significa que pelo menos uma fila/coluna de amostras é convertida em código com modo de paleta normal. 0 num_copy_pixel_row não deve ser igual a CU_width. Portanto, a faixa de palavra de código de num_copy_pixel_row é limi a ser de 0 a (CU_width-l) . Por exemplo, caso o código Exponential-Golomb truncado com ordem K (código EG-K truncado), o código Unário truncado de N-bits + código EG- K, ou o mesmo método de binarização usado na execução de paleta (isto é, ser binarizado para palette_run_msb_id_plusl e palette_run_refinement_bits) seja usado para conversão em código do num_copy_pixel_row, o cMax, o maxPaletteRun ou é definido que o valor possivel máximo seja CU_width -1.
[232] Nessa seção, o CU_width mencionado acima pode ser substituído por CU_height, PU_width ou PU_height para pixel de cópia baseada em fila em nivel de CU ou em nivel de PU de método contiguo.
[233] Na conversão de mapa de indicador de paleta em código de SCM-4.0, o número de indices é sinalizado primeiro. Para sinalizar o número de índices, uma variável "número de índices - tamanho de paleta" é derivada primeiro. Um processo de mapeamento é, então, realizado para mapear o "número de índices - tamanho de paleta" para um "valor mapeado". 0 valor mapeado é binarizado com o mesmo método de binarização usado para "coeff abs_level_remaining" e é sinalizado. A parte de prefixo é representada por código Tunrated Rice. A parte de sufixo é representada por código Exp-Golomb. Pode ser considerado que esse processo de binarização tem um cParam de entrada e o cParam é definido para (2 + indexMax/6) . No entanto, o indexMax/6 exige uma divisão ou uma operação de tabela de pesquisa. Portanto, de acordo com uma modalidade da presente invenção, o cParam é definido para (2+indexMax/M) e M é um número inteiro potência de 2 (por exemplo, 2n e n é um número inteiro). Portanto, indexMax/M pode ser implantado deslocando-se indexMax à direita por n bits. Por exemplo, cParam é definido como (2+indexMax/4) ou (2+indexMax/8), que pode ser implantado deslocando-se indexMax à direita por 2 ou 3 bits respectivamente.
[234] Na especificação de SCC de HEVC atual ou versões anteriores, os valores dos pixels de escape em conversão de paleta em código são sinalizados em uma forma intercalada com outros indices regulares durante a conversão de mapa de indicador em código, ou os valores de pixels são agrupados após a conversão de mapa de indicador em código ser concluida. De acordo com uma modalidade da presente invenção, todos os valores de pixel de escape são agrupados na frente de conversão de mapa de indice em código.
[235] Assume-se que há N pixels de escape em localizações diferentes dentro do bloco de conversão em código atual, em que N é um número inteiro positivo. Em uma modalidade, todos os valores de cor desses pixels de escape são codificados/decodifiçados conjuntamente antes codificar/decodificar o mapa de indicador de paleta desse bloco de conversão em código. Dessa forma, quando um indicador é decodificado como o indicador de escape, seu valor de pixel correspondente não precisa mais ser decodificado. Deve ser observado que alguns pixels de escape podem ter o mesmo valor de cor. Em uma modalidade, o valor de pixel de cada ocorrência de pixel de escape ainda é escrito no fluxo de bits.
[236] Na Figura 16, é mostrado um exemplo de decodificação de cores de escape, de acordo com uma modalidade desse método, com N = 5, em que o valor de pixel de cada ocorrência de pixel de escape ainda é escrito no fluxo de bits. Nesse exemplo, é usada varredura transversal horizontal. Cada pixel de escape pode encontrar sua cor correspondente na tabela decodificada, de acordo com a ordem de decodificação.
[237] Em outra modalidade, apenas valores de cor não duplicados são escritos no fluxo de bits, e um indicador daquelas cores escritas é sinalizado para cada ocorrência de pixel de escape.
[238] A Figura 17 ilustra um exemplo de decodificação de cores de escape, de acordo com uma modalidade desse método, com N — 5, em que apenas valores de cor não duplicados são escritos no fluxo de bits. Nesse exemplo, é usada varredura transversal horizontal. Apenas cores não duplicadas são decodificadas (por exemplo, M — 3), e é sinalizado um indicador nessa tabela de cor para cada ocorrência de pixel de escape (por exemplo, N = 5) . Cada pixel de escape pode encontrar sua cor correspondente na tabela decodificada, de acordo com a ordem de decodificação.
[239] Em uma modalidade, o número de cores de escape codificado/decodifiçado é sinalizado. Por exemplo, após cada cor de escape ser codificada ou decodificada, um sinalizador de 1-bit "end_of_escape_color_flag" é usado para sinalizar se essa é a última cor a ser convertida em código ou decodificado. Quando end_of_escape_color_flag decodificado é 1, mais nenhuma cor de escape precisa ser decodificada.Assumindo-se que há N cores de escape no bloco de conversão em código atual, os últimos M pixels têm o mesmo valor de cor, em que M e N são números inteiros e M < = N. Em outra modalidade, apenas um valor de cor desses M pixels precisa ser enviado, e end_of_escape_color_flag é definido para 1. Os últimos (M-l) pixels de escape são inferidos para compartilhar o último valor de cor de escape decodificado. Um exemplo desse método é mostrado na Tabela 23 para N = 5 e M — 3 .TABELA 23.
[240] Em outra modalidade, o número total de cores de escape é sinalizado explicitamente, antes de codificar/decodificar os valores de cor. Além disso, end_of_escape_color_flag pode ser convertido em código de desvio ou convertido em código de contexto.
[241] 0 número total de cores de escape decodificadas pode ser restringido, definindo-se um número permitido máximo em um cabeçalho de nivel alto tal como em nivel de sequência, nivel de imagem ou nivel de fatia.
[242] Caso esse número máximo seja alcançado, os pixels de escape remanescentes são inferidos para compartilhar o valor da última cor de escape decodificada, de acordo com uma modalidade. Em outra modalidade, os pixels de escape remanescentes são inferidos para compartilhar um valor de cor de escape decodificada especifica, tal como a cor usada mais frequentemente.
[243] No SCM 3.0, a faixa de valor de indicador de cor depende do tamanho de paleta e do sinalizador de escape. Caso o sinalizador de escape esteja desligado, o valor de indicador máximo é igual ao tamanho de paleta. Caso o sinalizador de escape esteja ligado, o valor de indicador máximo é igual a (tamanho de paleta + 1) . Caso o valor de indicador máximo seja igual a N, a faixa de valor de indicador possivel é de 0 a (N-l) . No SCM 3.0, o valor de indicador máximo igual a 0 é proibido. Caso o valor de indicador máximo seja igual a 1, todos os indices de cor em uma CU serão inferidos como 0. É presumido que todos os indices de cor devem ser 0, caso haja apenas um valor de indicador possivel.
[244] De acordo com revelação anterior, um pixel pode ser sinalizado por um COPY_ABOVE. Nesse caso, o mesmo copiará não apenas os indices de pixel dos pixels acima, mas também os valores de pixel dos pixels acima. O decodificador pode reconstruir o pixel em um COPY_ABOVE do valor de pixel copiado sem se referir à paleta. Caso o pixel acima esteja fora de um limite de CU, de acordo com revelação anterior, um indicador especial para o pixel construido contiguo (NCPs) de uma CU contigua, denotado como N é atribuído, de acordo com revelação anterior. Quando um pixel é sinalizado por um COPY ABOVE, o mesmo copiará não apenas o pixel indicador (N) do pixel acima, mas também o valor de pixel do pixel acima indicado pela área preenchida com pontos na Figura 18, em que o limite de CU (1810) é mostrado.
[245] Com base no método que copia o valor de pixel NCP, a hipótese de manipular CU de paleta convertida em código com valor de indicador zero/um não é verdadeira. Para o caso em que o valor de indicador máximo é igual a 0, todos os pixels em uma CU podem ser preditos a partir de NCPs, conforme mostrado na Figura 19.
[246] Caso o valor de indicador máximo seja igual a 1, nem todos os índices de cor podem ser 0. Parte dos pixels pode ser 0 e parte dos pixels pode ser predita a partir de NCP, conforme mostrado na Figura 20.
[247] Nos exemplos mostrados na Figura 19 e na Figura 20, não há nenhuma sintaxe correspondente que não possa ser sinalizada no SCM3.0. Consequentemente, a seguir é revelada uma nova sintaxe para sinalizar esses casos.
[248] No SCM3.0, uma CU de paleta convertida em código contém a sintaxe a seguir: • Palette_share_flag igual a 1 especifica que o tamanho de paleta é igual a PreviousPaletteEntries anterior e as entradas de paleta inteiras são as mesmas que as entradas de paleta anteriores. • Palette_transpose_flag igual a 1 especifica que o processo de transposição é aplicado aos índices de paleta associados da CU atual. • Palette_transpose_flag igual a 0 especifica que o processo de transposição não é aplicado aos índices de paleta associados da CU atual. • Palette escape_val_present_flag especifica o valor de amostra de escape convertido em código. Palette_prediction_run[i] especifica a diferença indices de entradas da paleta reutilizada atual e da próxima reutilizada a partir do PreviousPaletteEntries de paleta anterior com as exceções a seguir: palette_prediction_run igual a 0 indica que a diferença entre os indices das entradas reutilizadas atual e próxima é 1, e palette_prediction_run igual a 1 indica que mais nenhuma entrada do PreviousPaletteEntries de paleta anterior é reutilizada. • Num_signaled_jpalette_entries especifica o número de entradas na paleta que são sinalizadas explicitamente para a unidade de conversão em código atual. • Palette_entries especifica o i-ésimo elemento na paleta para o componente de cor cldx. • Palette_run_coding() especifica o padrão de conversão de execução em código de mapa de indicador.
[249] A fim de fornecer sintaxe para a predição de indicador através de uma CU, os exemplos de sintaxe a seguir são revelados de acordo com uma modalidade da presente invenção:
[250] Exemplo de Sintaxe 1: Um novo sinalizador all_pixel from_NCP_flag é adicionado. Caso all_pixel_from_NCP_flag esteja desligado, outra sintaxe é a mesma que o SCM3.0. Na primeira fila, o modo de execução de cópia pode ser sinalizado para permitir predição através de uma CU. Caso all_pixel_from_NCP_flag esteja ligado, implica em que todos os pixels sejam preditos a partir de NCPs. Palette_transpose_flag pode ser sinalizado para implicar em predição de NCPs à esquerda ou NCPs acima. Outra direção de predição também pode ser sinalizada. Caso all_pixel_from_NCP_flag esteja ligado, sinalização palette_ share_flag, palette_escape_val_present_flag, palette_ prediction_run, num_signaled_palette_entries, palette_ entries ou palette_run_coding() podem ser ignorados.
[251] A Figura 21 ilustra um fluxograma exemplificativo de sinalização para suportar predição de indicador através de uma CU de acordo com o exemplo acima. Na etapa 2110, é testado se all^pixel_f rom_NCP_f lag é igual a 1. Caso o resultado seja "sim", a etapa 2130 é realizada. Caso o resultado seja "não", a etapa 2120 é realizada. Na etapa 2130, palette_transpose_flag é sinalizado para implicar na predição de NCPs à esquerda ou NCPs acima. Na etapa 2120, é usada sintaxe com base no SCM3.0 para predição de indicador através de uma CU.
[252] Exemplo de Sintaxe 2: Um novo sinalizador any_jç>ixel_from_NCP_f lag é adicionado. Caso any_j>ixel_from _NCP_flag esteja desligado, a outra sintaxe é a mesmo que o SCM3.0. Na primeira fila, o modo de execução de cópia não é sinalizado (nenhuma predição através de CU) . Caso any_pixel_f rom_NCP__f lag esteja ligado, implica em que partes de pixels sejam preditos a partir de NCPs. O codificador pode sinalizar palette_share_flag, palette_prediction_run, num_signaled_palette_entries, palette_escape_val_present_ flag, e o decodificador pode calcular o valor de indicador máximo com base nas informações. Caso o valor de indicador máximo seja igual a 0, todos os pixels são preditos a partir de NCPs, e palette_run_coding() podem ser ignorados. Caso o valor de indicador máximo seja maior do que 0, parte dos pixels são preditos a partir de NCPs, e palette_run_coding () pode ser sinalizado.
[253] A Figura 22 ilustra um fluxograma exemplificativo de sinalização para suportar predição de indicador através de uma CU de acordo com o exemplo acima. Conforme mostrado na etapa 2210, é testado se any_pixel_from_NCP_flag é igual a 1. Caso o resultado seja "sim", a etapa 2230 é realizada. Caso o resultado seja "não", a etapa 2220 é realizada. Na etapa 2220, a sintaxe com base no SCM3.0 é usada para predição de indicador sem a predição através de uma CU. Na etapa 2230, vários elementos de sintaxe que incluem palette_share_flag, palette_prediction_run, num_signaled_ palette_entries e palette_escape__val_present_flag são sinalizados. O decodificador calcula o valor de indicador máximo com base nas informações e verifica se o valor de indicador máximo é igual a 0 na etapa 2240. Caso o resultado seja "sim", a etapa 2260 é realizada. Caso o resultado seja "não", a etapa 2250 é realizada. Na etapa 2250, palette_transpose_f lag e palette_run_coding() são sinalizados. Na etapa 2260, palette_transpose_flag é sinalizado e palette_run_coding() é ignorado (isto é, todos os pixels são preditos a partir de NCPs).
[254] Exemplo de Sintaxe 3: Um novo sinalizador any_pixel_f rom_NCP_f lag é adicionado. Caso any_jsixel_f rom _NCP_flag esteja desligado, a outra sintaxe é a mesma que o SCM3.0. Na primeira fila, o modo de execução de cópia não é sinalizado (nenhuma predição através de CU) . Caso any_pixel_from_NCP_flag esteja ligado, implica em que partes de pixels sejam preditos a partir de NCPs. O codificador pode sinalizar palette_share_flag, palettej?rediction_run, num_signaled_jpalette_entries, palette_escape_val_present_ flag, e o decodificador pode calcular o valor de indicador máximo com base nas informações. Caso o valor de indicador máximo seja igual a 0, todos os pixels são preditos a partir de NCPs, e palette_run_coding() pode ser ignorado como na Figura 2. Caso contrário, a outra sintaxe é a mesma que o SCM3.0. Na primeira fila, o modo de execução de cópia é sinalizado (predição através de CU). Deve ser observado que, caso o valor de indicador máximo seja igual a 1, palette_run_coding() e palette_transpose_flag podem ser ignorados.
[255] A Figura 23 ilustra um fluxograma exemplificative de sinalização para suportar predição de indicador através de uma CU de acordo com o exemplo acima. O fluxograma é substancialmente o mesmo que aquela na Figura 22, exceto para o caso em que o indicador máximo não é 0 (isto é, o trajeto "não" a partir da etapa 2240). Nesse caso, a sintaxe de acordo com o SCM3.0 é usada para predição através de CU conforme mostrado na etapa 2310.
[256] Exemplo de Sintaxe 4 "all_pixel_f rom_NCP_f lag" no Exemplo de Sintaxe 1 e "any_pixel_from_NCP_flag" no Exemplo de Sintaxe 2 ou 3 podem ser combinados em palette_prediction_run. No SCM3.0, palette_prediction_run são conversão em código de tamanho de execução. Caso a primeira execução (isto é, palette_prediction_run[0]) seja igual a um valor fixo ou derivado, all_pixel_from_NCP_flag ou any_pixel_from_NCP_flag é inferido como ligado. 0 valor pode ser 0 ou 1.
[257] Exemplo de Sintaxe 5: O codificador pode sinalizar palette share_flag, palette_j?rediction_run e num_signaled _palette_entries conforme mostrado na etapa 2410 da Figura 24. Então, o tamanho de paleta pode ser derivado de acordo com as informações.
[258] 0 tamanho de paleta é verificado para determinar do mesmo é igual a 0 conforme mostrado na etapa 2420. Caso o tamanho de paleta seja maior do que 0 (isto é, o trajeto "não" a partir da etapa 2420), outra sintaxe é a mesma que o SCM3.0 conforme mostrado na etapa 2430. Na primeira fila, o modo de execução de cópia pode ser sinalizado ou não dependendo da predição ser através de CU ou não.
[259] Caso o tamanho de paleta seja igual a 0 (isto é, o trajeto "sim" a partir da etapa 2420), any_pixel_fr°m_NCP_flag é sinalizado. É verificado se any_pixel_from_NCP_flag está ligado na etapa 2440. Caso any_pixel_from_NCP_flag esteja desligado (isto é, o trajeto "não" a partir da etapa 2440), palette_escape_val_present_flag é inferido como ligado conforme mostrado na etapa 2450 e sintaxe com base no SCM3.0 é usada para a predição de indicador sem predição através de uma CU. Caso any_pixel_from_NCP_flag esteja ligado, palette_escape_val_present_flag é sinalizado. Caso any_pixel_fr°m_NCP_flag esteja ligado (isto é, o trajeto "sim" a partir da etapa 2440) e palette_escape_valjDiesent_flag esteja desligado (isto é, o trajeto "não" a partir da etapa 2460), todos os pixels são preditos a partir de NCPs e palette_run_coding () pode ser ignorado conforme mostrado na etapa 2470. Caso any_pixel_from_NCP_flag esteja ligado (isto é, o trajeto "sim" a partir da etapa 2440) e palette_escape_val _present_flag esteja ligado, parte dos pixels são preditos a partir de NCPs, e palette_run_coding() pode ser sinalizado conforme mostrado na etapa 2480.
[260] Exemplo de Sintaxe 6: Esse exemplo substancialmente o mesmo que o Exemplo de Sintaxe 5, exceto para o caso em que any_pixel_from_NCP_flag está ligado (isto é, o trajeto "sim" a partir da etapa 2440) e palette_escape_val_present_flag está ligado (isto é, o trajeto "sim" a partir da etapa 2460). Nesse caso, todos os pixels são indicadores de escape conforme mostrado na etapa 2510 da Figura 25.
[261] Exemplo de Sintaxe 7: O codificador pode sinalizar palette_share_flag, palette_prediction_run, num_signaled_ palette_entries conforme mostrado na etapa 2610 da Figura 26. Então, o tamanho de paleta pode ser derivado de acordo com as informações.
[262] 0 tamanho de paleta é verificado na etapa 2620 para determinar se o mesmo é igual a 0. Caso o tamanho de paleta seja igual a 0 (isto é, o trajeto "sim" a partir da etapa 2620), all_pixel_from_NCP_flag é sinalizado e é verificado se all^pixel_from_NCP_flag está ligado na etapa 2640. Caso all_pixel_from_NCP_flag esteja ligado (isto é, o trajeto "sim" a partir da etapa 2640), implica em que todos os pixels sejam preditos a partir de NCPs conforme mostrado na etapa 2660. Nesse caso, palette_transpose_flag pode ser sinalizado para implicar a predição a partir dos NCPs à esquerda ou dos NCPs acima. Outra direção de predição também pode ser sinalizada. Caso contrário, a sintaxe é a mesma que o SCM3.0 conforme mostrado na etapa 2650. Na primeira fila, o modo de execução de cópia pode ser sinalizado (isto é, predição através de CU).
[263] Exemplo de Sintaxe 8: No Exemplo de Sintaxe 8, a conversão de execução em código pode ser sinalizada para indicar o caso na Figura 27. O fluxograma na Figura 27 é similar àquele na Figura 26. No entanto, a etapa 2630 e a etapa 2650 na Figura 26 são substituidas pela etapa 2710 e a etapa 2720 (isto é, sinalização de palette_escape_ val_Present_flag, palette_transcope_flag e palette_run _coding()).
[264] Exemplo de Sintaxe 9 O codificador pode sinalizar palette_share_flag, palette_reutilizar_flag(), num_signaled _palette_entries, palette_escape_val_present_f lag conforme mostrado na etapa 2810 da Figura 28A, e o decodificador pode calcular o valor de indicador máximo com base nas informações. Caso o valor de indicador máximo seja igual a 0 ou 1 (isto é, o trajeto "não" a partir da etapa 2820), palette_run_coding() pode ser ignorado. Caso o valor de indice máximo seja igual a 0 (isto é, o trajeto "não" a partir da etapa 2830), todos os pixels são preditos a partir de NCPs conforme mostrado na etapa 2850. Caso o valor de indicador máximo seja maior do que 1 (isto é, o trajeto "sim" a partir da etapa 2820), palette_transpose_flag pode ser sinalizado para implicar na predição a partir de NCPs à esquerda ou NCPs acima conforme mostrado na etapa 2840. Outra direção de predição também pode ser sinalizada. Caso o valor de indicador máximo seja igual a 1 (isto é, o trajeto "sim" a partir da etapa 2830), todos os indices de cor em uma CU serão inferidos como 0 ou escape conforme mostrado na etapa 2860.
[265] Exemplo de Sintaxe 10: 0 codificador pode sinalizar palette_share_flag, palette_reutilizar_flag(), num_ signaled_palette_entri.es, palette_escape_val_present_flag conforme mostrado na etapa 2812 da Figura 28B, decodificador pode calcular o valor de indicador máximo com 0/oe/v , base nas informações. Caso o valor de indice máximo seja igual a 0 (isto é, o trajeto "não" a partir da etapa 2822), todos os pixels são preditos a partir de NCPs conforme mostrado na etapa 2832. Caso o valor de indicador máximo seja maior do que 0 (isto é, o trajeto "sim" a partir da etapa 2822), palette_transpose_flag pode ser sinalizado para implicar na predição a partir de NCPs à esquerda ou NCPs acima conforme mostrado na etapa 2842. Outra direção de predição também pode ser sinalizada. Palette_run_coding() pode ser ignorado. Caso o valor de indicador máximo seja maior do que 0, palette_transpose_flag e palette_run_ codingO podem ser sinalizados, como na Figura 20.
[266] Nos exemplos de sintaxe acima, os NCPs podem ser a fila mais próxima acima ou a coluna mais próxima à esquerda. Caso o número de linha de NCPs seja maior do que 1, (por exemplo, duas filas mais próximas acima ou duas colunas mais próximas à esquerda), sinalização adicional pode ser necessária para indicar que linha de NCPs é usada para predição. No caso de "todos os pixels serem preditos a partir de NCPs" nos exemplos de sintaxe, os NCPs podem ser restritos à fila mais próxima acima ou à coluna mais próxima à esquerda.
[267] Embora sejam usados elementos de sintaxe específicos para ilustrar exemplos de sintaxe para suportar predição de indicador através de uma CU, de acordo com modalidades da presente invenção, esses elementos de sintaxe específicos não devem ser interpretados como limitações da presente invenção. Uma pessoa versada na técnica pode usar outros elementos de sintaxe e semântica para praticar a predição de indicador através de uma CU sem se afastar do espirito da presente invenção.
[268] Para predição de indicador através de uma CU, um sinalizador habilitante pode ser sinalizado em PPS (conjunto de parâmetros de imagem) ou SPS (conjunto de parâmetros de sequência). Além disso, o sinalizador pode ser sinalizado apenas quando palette_mode_enabled_flag em SPS for verdadeiro. Caso contrário o mesmo será inferido como falso. Quando o sinalizador habilitante para a predição de indicador através de uma CU é falso, a predição de indicador através de uma CU é desabilitada. Em outra modalidade, quando o sinalizador habilitante para predição de indicador através de uma CU é falso, indices ou valores contiguos podem ser inferidos como valores predefinidos. Por exemplo, indices contiguos podem ser definidos para 0 e valores contiguos podem ser definidos para 128 para cada componente de cor. Nessa invenção, o método para predizer indices ou valores no bloco não é limitado às informações de pixels contiguos (ou blocos).
[269] Seleção de Contexto Para Modo de Execução: Em SCM 3.0, o elemento de sintaxe, palettejnode para conversão de mapa de indicador em código é codificado em contexto. Há dois contextos para palettejnode. O contexto é selecionado de acordo com palette_mode do indicador acima. No entanto, para o indicador na primeira fila, não há nenhum indicador acima.
[270] Diversos métodos são revelados para lidar com seleção de contexto nesse caso: 1. Contexto da primeira fila é fixado a um contexto. O contexto pode ser o primeiro contexto quando o indicador acima é convertido em código por um INDEX-RUN ou o segundo contexto quando o indicador acima é convertido em código por um modo COPY-RUN. 2. Pode haver o terceiro contexto para o indicador da primeira fila. 3. Todos os indices em uma CU usam o mesmo contexto para codificar palette_mode. O contexto pode ser selecionado de acordo com o tamanho de CU, e todos os indices em uma CU usam o mesmo contexto para codificar palette_mode. Pode haver dois contextos nesse caso. Caso o tamanho de CU seja maior do que um limiar fixo ou derivado, o primeiro contexto é usado. Caso contrário, outro contexto é usado. Em outro exemplo, o número de contexto pode ser reduzido para 1. Nesse caso, o contexto é o mesmo para todos os tamanhos de CU.
[271] Em outra modalidade, para alcançar o mesmo efeito do esquema de predição que o revelado na Figura 19 e na Figura 20. Com base na Intrapredição convencional em HEVC, na extensão de faixa HEVC ou na SCC de HEVC, o elemento de sintaxe, rqt_root_cbf é sinalizado para indicar se a TU (unidade de transformada) fundamentada a partir da CU atual tem residuo ou não. A sinalização de rqt_root_cbf pode ser a mesma que a sinalização de rqt_root_cbf para interconversão de residuo de CU em código em HEVC.
[272] Com base na Intrapredição com rqt_root_cbf de acordo com uma modalidade da presente invenção, rqt_root_cbf pode ser aplicado seletivamente a um subconjunto dos modos de Intrapredição que incluem modos de Intrapredição de luma e croma. 0 rqt_root_cbf é sinalizado apenas para aqueles modos de Intrapredição no subconjunto. Em um exemplo, o esquema modificado é aplicado apenas a modo de Intrapredição de luma igual a modos de predição horizontal ou vertical enquanto o modo de Intrapredição de croma não é modificado.
[273] Em outra modalidade adicional, um sinalizador de nivel de CU é sinalizado para uma CU Intra para indicar se há sinal de residuo para conversão em código dessa CU Intra. De maneira similar, esse sinalizador pode ser aplicado seletivamente a um subconjunto dos modos de Intrapredição. BUSCA DE CÓPIA INTRABLOCO (IntraBC)
[274] Uma modalidade da presente invenção muda os pixels fonte de IntraBC. Os pixels para predição e compensação IntraBC podem ser os pixels não filtrados (isto é, antes da deblocagem) ou pixels filtrados (isto é, após a deblocagem e SAO (deslocamento adaptativo de amostra)) dependendo da posição dos pixels.
[275] Por exemplo, os pixels para predição e compensação IntraBC pode ter como base os pixels não filtrados para os pixels na CTU atual (2910) e na CTU à esquerda (2920) conforme mostrado na Figura 29. Outros pixels ainda usam pixels filtrados. A Figura 29 ilustra um exemplo de pixels fonte de acordo com uma modalidade da presente invenção, em que os pixels preenchidos com pontos são de pixels não filtrados e os pixels limpos são de pixels filtrados para IntraBC.
[276] Em outro exemplo, os pixels para predição e compensação IntraBC são os pixels não filtrados para os pixels na CTU atual (3010), na CTU à esquerda (3020), e nas quatro linhas inferiores da CTU acima (3030) e nas quarto linhas inferiores da CTU acima à esquerda (3040) conforme 1 mostrado na Figura 30. Os outros pixels estão usando pixels filtrados. Na Figura 30, os pixels preenchidos com pontos são de pixels não filtrados e os pixels limpos são de pixels filtrados para IntraBC.
[277] Em outro exemplo, os pixels para predição e compensação IntraBC são os pixels não filtrados para os pixels na CTU atual, nas N CTUs à esquerda, e nas quatro linhas inferiores da acima CTU e nas quatro linhas inferiores das N CTUs acima à esquerda conforme mostrado na Figura 31.N é um número inteiro positivo. Os outros pixels estão usando pixels filtrados. Na Figura 31, os pixels preenchidos com pontos são de pixels não filtrados e os pixels limpos são de pixels filtrados para IntraBC.
[278] Em outro exemplo, os pixels para predição e compensação IntraBC são os pixels não filtrados para os pixels na CTU atual, nas quatro linhas inferiores da CTU acima, e nas quatro colunas à direita da CTU à esquerda. Os outros pixels estão usando filtrados conforme mostrado na Figura 32. Na Figura 32, os pixels preenchidos com pontos são de pixels não filtrados e os pixels limpos são de pixels filtrados para IntraBC.
[279] Em outro exemplo, os pixels para predição e compensação IntraBC são os pixels não filtrados para os pixels na CTU atual, nas N CTUs à esquerda, nas quatro linhas inferiores da CTU acima e nas quatro linhas inferiores das N CTUs acima, e nas quatro colunas à direita da (N+l)-ésima CTU à esquerda. N é um valor inteiro positivo. Os outros pixels estão usando pixels filtrados. Na Figura 33, os pixels preenchidos com pontos são de pixels não filtrados e os pixels limpos são de pixels filtrados para IntraBC.
[280] A Figura 34 ilustra um fluxograma exemplificativo para um sistema que incorpora uma modalidade da presente invenção para bloco convertido em código de paleta para compartilhar armazenamento temporário de coeficiente de transformada. 0 sistema determina um modo de predição atual para um bloco atual na etapa 3410 e designa uma área de armazenamento como um armazenamento temporário de coeficiente de transformada na etapa 3420. Caso o modo de predição atual seja o modo de Intrapredição ou de Interpredição, as primeiras informações relacionadas a coeficientes de transformada para predição de residuo do bloco atual que resultam de Intrapredição ou Interpredição são armazenadas no armazenamento temporário de coeficiente de transformada na etapa 3430. Caso o modo de predição atual seja o modo de conversão de paleta em código, as informações relacionadas a dados de paleta associados ao bloco atual são armazenadas no armazenamento temporário de coeficiente de transformada na etapa 3440. 0 bloco atual é, então, codificado ou decodificado com base nas informações relacionadas aos coeficientes de transformada caso o bloco atual seja convertido em código no modo de Intrapredição ou no modo de Interpredição, ou nas informações relacionadas aos dados de paleta armazenados no armazenamento temporário de coeficiente de transformada caso o bloco atual seja convertido em código no modo de conversão de paleta em código na etapa 3450.
[281] A descrição acima é apresentada para possibilitar que uma pessoa de habilidade comum na técnica pratique a presente invenção como fornecida no contexto de uma aplicação particular e suas exigências. Várias modificações às modalidades descritas ficarão evidentes para as pessoas versadas na técnica e os princípios gerais definidos no presente documento podem ser aplicados a outras modalidades. Portanto, a presente invenção não se destina a ser limitada às modalidades particulares mostradas e descritas, mas deve ser compatível com o mais amplo escopo consistente com os princípios e recursos inovadores revelados neste documento. Na descrição detalhada acima, inúmeros detalhes específicos são ilustrados a fim de fornecer uma compreensão meticulosa da presente invenção. Não obstante, será compreendido por uma pessoa versada na técnica que a presente invenção pode ser praticada.
[282] A modalidade da presente invenção, conforme descrito acima, pode ser implantada em vários hardwares, códigos de software ou em uma combinação dos mesmos. Por exemplo, uma modalidade da presente invenção pode ser um ou mais circuitos eletrônicos integrados em um chip ou código de programa de compressão de vídeo integrado em software de compressão de vídeo para realizar o processamento descrito no presente documento. Uma modalidade da presente invenção também pode ser código de programa para ser executado em um Processador de Sinal Digital (DSP) para realizar o processamento descrito no presente documento. A invenção também pode incluir inúmeras funções a serem realizadas por um processador de computador, um processador de sinal digital, um microprocessador ou matriz de portas programáveis no campo (FPGA). Esses processadores podem ser configurados para realizar tarefas particulares de acordo com a invenção, executando-se código de software ou código de firmware legivel por máquina que define os métodos particulares incorporados pela invenção. 0 código de software ou código de firmware pode ser desenvolvido em linguagens de programação diferentes e formatos ou estilos diferentes. 0 código de software também pode ser compilado para diferentes plataformas especificas. No entanto, formatos de código, estilos e linguagens diferentes de códigos de software e outros meios para configurar código para realizar as tarefas de acordo com a invenção não se afastam do espirito e escopo da invenção.
[283] A presente invenção pode ser incorporada em outras formas especificas sem se afastar do espirito ou características essenciais da mesma. Os exemplos descritos devem ser considerados em todos os aspectos apenas como ilustrativos e não como restritivos. 0 escopo da invenção é, portanto, indicado pelas reivindicações anexas, em vez de pela descrição acima. Todas as mudanças estiverem dentro do significado e da faixa de equivalência das reivindicações devem ser abrangidas no escopo das mesmas.
Claims (12)
1. Método de conversão de vídeo em código com o uso de modos de predição que incluem um modo de conversão de paleta em código, um modo de Intrapredição e um modo de Interpredição, sendo que caracterizado pelo fato de que o método compreende: determinar um modo de predição atual para um bloco atual; se o modo de predição atual para o bloco atual for o modo de Intrapredição ou o modo de Interpredição, armazenar as primeiras informações relacionadas a coeficientes de transformada para predição de resíduo do bloco atual que resultaram de execução um Intrapredição ou um Interpredição em um armazenamento temporário de coeficiente de transformada; codificar ou decodificar o bloco atual com base nas primeiras informações relacionadas aos coeficientes de transformada armazenados no armazenamento temporário de coeficiente de transformada; e se o modo de predição atual para o bloco atual for o modo de conversão de paleta em código, armazenar as segundas informações relacionadas a dados de paleta associados ao bloco atual no armazenamento temporário de coeficiente de transformada; em que quando um bloco anterior que é codificado de acordo com o modo de Intrapredição ou o modo de Interpredição existe, uma área de memória no armazenamento temporário de coeficiente de transformação que armazena informações anteriores relacionadas aos coeficientes de transformada para predição residual do bloco anterior é pelo menos parcialmente reutilizada para armazene a segunda informação, e codificar ou decodificar o bloco atual com base nas segundas informações relacionadas aos dados de paleta armazenados no armazenamento temporário de coeficiente de transformada, em que, caso o modo de predição atual para o bloco atual seja o modo de conversão de paleta em código, os dados de paleta inclui um tipo de execução de paleta, um valor de execução de paleta, índices de paleta, valores de escape, sinalizadores de escape, uma tabela de paleta ou qualquer combinação dos mesmos associados ao bloco atual, as segundas informações relacionadas aos dados de paleta inclui os dados de paleta, dados de paleta analisados ou dados de paleta reconstruídos, os sinalizadores de escape para o bloco atual são obtidos a partir da segunda informação e armazenados em uma parte do armazenamento temporário de coeficiente de transformação, e valores de pixel reconstruídos ou valores de escape do bloco atual são armazenados em outra parte do armazenamento temporário de coeficiente de transformação.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que, caso o modo de predição atual para o bloco atual é o modo de conversão de paleta em código, índices de paletas para amostras do bloco atual são obtidos a partir da segundo informação em um estágio de análise, e os índices de paleta reconstruídos e os valores de escape reconstruídos do bloco atual são armazenados no armazenamento temporário de coeficiente de transformada em um lado de decodificador.
3. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que, caso o modo de predição atual para o bloco atual for o modo de conversão de paleta em código, índices de paleta para amostras do bloco atual são obtidos a partir da segunda informação em um estágio de análise, e os valores de pixel reconstruídos e os valores de escape reconstruídos do bloco atual são armazenados no armazenamento temporário de coeficiente de transformada em um lado de decodificador.
4. Método, de acordo com a reivindicação 3, caracterizado pelo fato de que, caso o modo de predição atual para o bloco atual for o modo de conversão de paleta em código, uma área de armazenamento é designada para armazenar a tabela de paleta durante o estágio de análise, e a uma área de armazenamento é liberada de uso pela tabela de paleta durante um estágio de reconstrução.
5. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que, caso o modo de predição atual para o bloco atual for o modo de conversão de paleta em código, os sinalizadores de escape para o bloco atual são armazenados no armazenamento temporário de coeficiente de transformada em um lado de decodificador.
6. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que os sinalizadores de escape são armazenados em uma parte de bit mais significativo (MSB) do armazenamento temporário de coeficiente de transformada.
7. Método de conversão de vídeo em código com o uso de modos de predição que incluem um modo de conversão de paleta em código caracterizado pelo fato de que o método compreende: receber um fluxo de bits de vídeo que corresponde a dados convertidos em código de um bloco atual ou a dados de entrada associados ao bloco atual; se um modo de predição atual para o bloco atual for o modo de conversão de paleta em código, analisar todos as amostras de escape para o bloco atual do fluxo de bits de vídeo em um lado de decodificador, ou organizar todas as amostras de escape para o bloco atual no fluxo de bits de vídeo em um lado de codificador; componentes de cores diferentes das amostras de escape sendo agrupados separadamente no fluxo de bits de vídeo; armazenar um grupo de componentes de uma mesma cor dos componentes em um armazenamento temporário de coeficiente de transformada, em que o armazenamento temporário de coeficiente de transformada é reutilizado para armazenar diferentes grupos de componentes de cores diferentes dos componentes de uma cor de cada vez; e decodificar ou codificar o bloco atual de acordo com o modo de conversão de paleta em código com o uso de informações que incluem as amostras de escape, em que o modo de conversão de paleta em código é executado de acordo com dados de paleta que incluem um tipo de execução de paleta, um valor de execução de paleta, índices de paleta, valores das amostras de escape, sinalizadores de escape, uma tabela de paleta ou qualquer combinação dos mesmos associada ao bloco atual, os sinalizadores de escape para o bloco atual são armazenados em uma parte do armazenamento temporário de coeficiente de transformada, e os valores de pixel reconstruídos ou os valores das amostras de escape do bloco atual são armazenados em outra parte do armazenamento temporário de coeficiente de transformada.
8. Método, de acordo com a reivindicação 7, caracterizado pelo fato de que as amostras de escape para o bloco atual são sinalizados em um fim dos dados convertidos em código de paleta para o bloco atual.
9. Método, de acordo com a reivindicação 7, caracterizado pelo fato de que componentes de cor diferentes das amostras de escape são agrupados e sinalizados separadamente para o bloco atual.
10. Método de conversão de vídeo em código com o uso de modos de predição que incluem um modo de conversão de paleta em código, caracterizado pelo fato de que o método compreende: analisar todas as entradas do preditor de paleta inicial correspondentes aos valores de cor iniciais para uma tabela de paleta global aplicável a uma sequência, uma imagem ou uma fatia de um conjunto de parâmetros de sequência correspondente (SPS), um conjunto de parâmetros de imagem correspondente (PPS) ou um cabeçalho de fatia correspondente de um fluxo de bits de vídeo em um lado do decodificador, ou organizar todas as entradas do preditor de paleta inicial para a tabela de paleta global aplicável à sequência, a imagem ou a fatia no SPS correspondente, o PPS correspondente ou o cabeçalho de fatia correspondente em um lado do codificador, componentes de cores diferentes das entradas do preditor de paleta inicial sendo agrupados separadamente no SPS correspondente, no PPS correspondente ou no cabeçalho de fatia correspondente; e decodificar ou codificar pelo menos um bloco codificado de paleta dentro da sequência, a imagem ou a fatia, incluindo: derivar a tabela de paleta global de acordo com as entradas do preditor de paleta inicial; obter uma ou mais novas entradas de paleta correspondentes a novos valores de cores aplicáveis a pelo menos um bloco codificado de paleta; derivar uma tabela de paleta para pelo menos um bloco codificado de paleta incorporando a tabela de paleta global e uma ou mais novas entradas de paleta; e decodificar ou codificar uma ou mais amostras do pelo menos um bloco codificado de paleta de acordo com índices de entradas de paleta da tabela de paleta.
11. Método de codificação de vídeo usando modos de predição, incluindo um modo de codificação de paleta, o método caracterizado pelo fato de que compreende: analisar novas entradas de paleta correspondentes a novos valores de cor para uma tabela de paleta atual aplicável a um bloco atual de um fluxo de bits de vídeo em um lado do decodificador, ou organizar as novas entradas de paleta para a tabela de paleta atual aplicável ao bloco atual no fluxo de bits de vídeo em um lado do codificador, componentes de cores diferentes das entradas da paleta sendo agrupados separadamente no fluxo de bits de vídeo; e decodificar ou codificar o bloco atual usando a tabela da paleta atual derivada de acordo com as novas entradas da paleta, incluindo: obter uma tabela de paleta prevista para o bloco atual; derivar a tabela de paleta atual para o bloco atual, incorporando a tabela de paleta prevista e as novas entradas de paleta; e decodificar ou codificar uma ou mais amostras do bloco atual de acordo com os índices de entradas da paleta da tabela da paleta atual.
12. Método, de acordo com a reivindicação 10, caracterizado pelo fato de que compreende ainda armazenar, em um mesmo armazenamento temporário, uma cor de cada vez, diferentes grupos de componentes de diferentes cores dos componentes de diferentes cores.
Applications Claiming Priority (13)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201462078595P | 2014-11-12 | 2014-11-12 | |
US62/078,595 | 2014-11-12 | ||
US201462087454P | 2014-12-04 | 2014-12-04 | |
US62/087,454 | 2014-12-04 | ||
US201562119950P | 2015-02-24 | 2015-02-24 | |
US62/119,950 | 2015-02-24 | ||
US201562145578P | 2015-04-10 | 2015-04-10 | |
US62/145,578 | 2015-04-10 | ||
US201562162313P | 2015-05-15 | 2015-05-15 | |
US62/162,313 | 2015-05-15 | ||
US201562170828P | 2015-06-04 | 2015-06-04 | |
US62/170,828 | 2015-06-04 | ||
PCT/CN2015/094410 WO2016074627A1 (en) | 2014-11-12 | 2015-11-12 | Methods of escape pixel coding in index map coding |
Publications (2)
Publication Number | Publication Date |
---|---|
BR112017009946A2 BR112017009946A2 (pt) | 2018-07-03 |
BR112017009946B1 true BR112017009946B1 (pt) | 2023-09-05 |
Family
ID=
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110519604B (zh) | 索引映射编解码中的跳出像素编解码方法 | |
CN107005717B (zh) | 索引映射编解码中的跳出像素编解码方法 | |
JP6149076B2 (ja) | イメージ、および、ビデオ符号化のパレットインデックスシグナリングの方法および装置 | |
JP6550412B2 (ja) | インデックスマップ符号化の予測器としてエスケープ画素を処理する方法 | |
KR101943805B1 (ko) | 비디오 코딩에서의 신택스에 대한 이진화 및 컨텍스트 적응 코딩의 방법 및 장치 | |
CN107534782B (zh) | 视频编解码中调色板模式编解码方法 | |
CA2934743C (en) | Method and apparatus for syntax redundancy removal in palette coding | |
JP2016076924A (ja) | ビデオ符号化のパルス符号変調、および、パレット符号化の方法 | |
CN107431827B (zh) | 使用调色板编码模式的视频和图像编解码的方法和装置 | |
KR101727449B1 (ko) | 영상 양자화 파라미터 복호 방법 | |
JP7560495B2 (ja) | ビデオ画像処理方法、装置、および記憶媒体 | |
BR112017009946B1 (pt) | Métodos de conversão de pixel de escape em código em conversão de mapa de indicador em código | |
KR101643120B1 (ko) | 영상 양자화 파라미터 부호화 방법 및 영상 양자화 파라미터 복호 방법 | |
BR112016014088B1 (pt) | Método e aparelho de codificação de um bloco de dados de vídeo | |
BR112016021228B1 (pt) | Método de codificação de um bloco de dados de vídeo e aparelho | |
BR112018000549B1 (pt) | Método de particionamento de blocos para a codificação ou decodificação de vídeo para um codificador de vídeo ou para um decodificador de vídeo respectivamente e aparelho para o particionamento de blocos para a codificação ou a decodificação de vídeo efetuada por um codificador de vídeo ou por um decodificador de vídeo respectivamente | |
BR112017023403B1 (pt) | Método e aparelho de codificação de entropia de dados de imagem ou vídeo |