ESTUDO SOBRE O FUNCIONAMENTO DOS ELEMENTOS SINTÁTICOS RESIDUAIS DO PADRÃO VVC (Anais do Salão Inovação, Ensino, Pesquisa e Extensão, 2022)
A codificação de vídeo está muito presente no nosso dia a dia, sendo transparente para a maioria das pessoas, mas de enorme importância na nossa vida atual. Este campo de estudo/computação é responsável pelos avanços que temos em serviços de streaming, como por exemplo a melhora de qualidade (imagem e velocidade) de um jogo de futebol ao vivo, uma live stream e até mesmo as séries e vídeos que vemos em provedores de streaming e.g., Youtube, Netflix, Twitch, Amazon prime,Disney plus,Hbo max, dentre outros. O VVC (Versatile Video Coding) é um padrão estado-da-arte, sendo o sucessor do HEVC (High Efficiency Video Coding), e que foi recentemente lançado. Este padrão foi desenvolvido com dois objetivos: (i) ter um suporte para uma grande gama de aplicações mais modernas (e.g., resoluções 4K, 8K) (ii) ser ainda melhor na compreensão de dados quando comparado com seu antecessor, o que nos ajuda a produzir vídeos de melhor qualidade com maior compressão e, consequentemente, gerarem menos dados/bits ao serem codificados. Nessa pesquisa estamos estudando os elementos sintáticos residuais do VVC , pois eles são responsáveis pela maior parte dos dados/bits do vídeo codificados. Em um primeiro momento buscamos entender como o codec, que é muito recente (ele é tão recente que ainda não existe um hardware específico), funciona (i.e., codifica/decodifica os vídeos) e futuramente otimizá-lo (possivelmente visando fazer um hardware específico para esta etapa da codificação). Um vídeo é formado por várias imagens e o codificador separa essas imagens em uma matriz 4x4 de coeficientes após a etapa de Transformadas. O codificador, portanto, faz alguns processos para diminuir o valor desses coeficientes, e o código residual do VVC contém os seguintes elementos: (i) sigflag que nos diz se o coeficiente é significativo, ou seja, se é diferente de zero, (ii) sigpattern que nos diz se o coeficiente tem sinal positivo ou negativo (supondo que não seja zero), (iii) par_level_flag que nos diz se o coeficiente é par ou não par (supondo que não seja zero, faz uma operação lógica AND com o coeficiente menos significativo do número) retornando da operação lógica AND 0 se o número for par e retornando um se o número for ímpar, (iv) gt1 (greater than one) que nos diz se o valor absoluto/em módulo do coeficiente é maior que um (caso não seja zero), (v) gt2 (greater than two) que nos diz se o valor absoluto/em módulo do coeficiente é maior que três (supondo que seja maior que um),o greater than two só é realizado caso o gt1 seja verdadeiro , ou seja o coeficiente é maior que um, (vi) rem_val faz uma manipulação em coeficientes maiores ou iguais a 4 (ou seja, supondo que o gt2 exista/esteja ativado, subtrai o coeficiente por 4 e o divide por 2, e o número final é atribuído ao rem_val). Com esse estudo preliminar concluímos que o alguns dos elementos sintáticos residuais do VVC são semelhantes aos do HEVC (o sigpattern, sigflag e gt1). Porém, a leitura da matriz 4x4 é diferente e alguns elementos residuais, por mais semelhantes que sejam, possuem algumas pequenas diferenças (gt2, por exemplo tem o mesmo nome nos dois porém no VVC é maior que três), além de existirem elementos residuais sintáticos que não estavam presentes no HEVC (par_level_flag e rem_val). Espera-se fazer mais análises para um melhor entendimento do padrão e comportamento desses elementos sintáticos residuais do VVC para que, futuramente possamos otimizá-lo, e buscar uma solução em hardware para o mesmo.