Foi lançado o versão 4.3.0 da biblioteca SVT-AV1 (Scalable Video Technology AV1) com implementações de codificador e decodificador do formato de codificação de vídeo AV1, para o qual foram utilizados recursos de paralelização de hardware disponíveis nos processadores x86_64 e ARM. O projeto foi criado pela Intel em parceria com a Netflix, com o objetivo de alcançar um nível de desempenho adequado para a recompilação de vídeo em tempo real e sua aplicação em serviços de vídeo sob demanda (VOD). Atualmente, o desenvolvimento está sendo realizado sob a égide da Aliança Open Media (AOMedia), que supervisiona o progresso do formato de codificação de vídeo AV1. O projeto anteriormente se desenvolvia dentro da iniciativa OpenVisualCloud, que também desenvolve os codificadores SVT-HEVC e SVT-VP9. O código é distribuído sob a licença BSD.
SVT-AV1 pode ser compilado para sistemas baseados em qualquer arquitetura para a qual exista um compilador compatível com o padrão C99, mas o melhor desempenho é alcançado em sistemas x86_64, onde são aplicadas otimizações em assembly baseadas em instruções SIMD (preferencialmente com suporte AVX2 no CPU, mas o mínimo necessário é SSE2). O consumo de memória depende do número de núcleos de processador utilizados na codificação, controlados pela opção "—lp". Devido à complexidade dos algoritmos utilizados em AV1, a codificação desse formato exige significativamente mais recursos do que outros formatos.
Entre as mudanças na nova versão do SVT-AV1:
- Foi realizada uma otimização de compromisso qualidade/velocidade para todos os presets, permitindo reduzir a carga no CPU em 5-8% enquanto mantém o mesmo nível de qualidade, além de diminuir o tempo de codificação em 10-11% em modo multiprocessado. As operações de eliminação de modos de codificação ineficazes (MD — Mode Decision), cálculo de vetores de movimento (MV — Motion Vector) e parâmetros de filtros durante a codificação, cálculo do tamanho dos coeficientes de frequência, busca de deslocamentos subpixel, cópia de blocos e eliminação de detalhes excessivos por meio do algoritmo RDOQ (Rate-Distortion Optimized Quantization) foram aceleradas. Em modo multiprocessado, para economizar recursos, o algoritmo de determinação da transmissão do conteúdo da tela agora é aplicado apenas a quadros I.
- Adicionado um sinalizador experimental "—fast-decode 3" para acelerar a decodificação de imagens estáticas.
- Adicionado o sinalizador «—fgs-table», que inclui suporte para tabelas de granularidade (film grain), e a API FILM_GRAIN_EVENT para definir parâmetros de granularidade vinculados a quadros.
- Aumentada a velocidade de codificação sem perdas.
- No modo de codificação com baixa latência, foi implementada a paralelização do processamento de blocos (tile).
- Adicionada a opção «max_allowed_consecutive_frames_skips» para configurar a omissão de quadros no modo de manutenção de taxa de bits constante (CBR).
- Adicionado o parâmetro «max_hierarchical_levels» para gerenciar o pool de buffers utilizado na alteração do tamanho dos grupos de quadros intermediários (mini-GOP — Group of Pictures).
- Adicionada a opção de compilação «—mobile-build» (no CMake — MOBILE_BUILD) para a formação de uma biblioteca de 8 bits para RTC, VOD e AVIF. Adicionadas opções CONFIG_ENABLE_* para desativar a compilação de ferramentas de codificação não utilizadas.
- Para sistemas x86, foram implementados manipuladores de 8 bits CDEF baseados em instruções AVX2 e SSE4.1, bem como transformações diretas de 16 bits baseadas em instruções AVX2 e AVX-512. Adicionado código otimizado utilizando instruções SSE4.1 para previsão entre quadros, manipulação de paletas e transformações. Otimizados manipuladores para quantização, cópia de blocos, cálculo de distorções e avaliação de diferenças subpixel.
- Para sistemas ARM, adicionadas variantes de manipuladores acelerados por meio de instruções de processador Neon.
Fonte: opennet.ru
