La version 4.3.0 de la bibliothèque SVT-AV1 (Scalable Video Technology AV1) a été publiée, avec des implémentations de l'encodeur et du décodeur pour le format de codage vidéo AV1, dont l'accélération utilise les extensions présentes dans les processeurs x86_64 et ARM pour le parallélisme matériel des calculs. Ce projet a été créé par Intel en partenariat avec Netflix dans le but d'atteindre un niveau de performance suffisant pour le recodage vidéo à la volée et son utilisation dans des services de vidéo à la demande (VOD). Actuellement, le développement est supervisé par l'alliance Open Media (AOMedia), qui s'occupe de l'évolution du format de codage vidéo AV1. Auparavant, le projet était développé dans le cadre du projet OpenVisualCloud, qui développe également des encodeurs SVT-HEVC et SVT-VP9. Le code est distribué sous la licence BSD.
SVT-AV1 peut être assemblé pour des systèmes basés sur n'importe quelle architecture pour laquelle un compilateur prenant en charge la norme C99 est disponible, mais les meilleures performances sont obtenues sur des systèmes x86_64, pour lesquels des optimisations d'assemblage basées sur les instructions SIMD sont appliquées (la prise en charge AVX2 dans le CPU est recommandée, mais au minimum SSE2 est suffisant). La consommation de mémoire dépend du nombre de cœurs de processeur utilisés lors de l'encodage, régulés par l'option « —lp ». En raison de la complexité accrue des algorithmes utilisés dans AV1, l'encodage de ce format nécessite considérablement plus de ressources que d'autres formats.
Parmi les changements dans la nouvelle version de SVT-AV1 :
- Une optimisation des compromis qualité/vitesse a été réalisée pour tous les préréglages, permettant de réduire la charge sur le CPU de 5 à 8 % tout en conservant le même niveau de qualité, ainsi que de réduire le temps d'encodage de 10 à 11 % en mode multithread. L'exécution des opérations d'exclusion des modes d'encodage inefficaces (MD — Mode Decision), du calcul des vecteurs de mouvement (MV — Motion Vector) et des paramètres de filtres pendant l'encodage, du calcul de la taille des coefficients de fréquence, de la recherche de décalages sous-pixels, de la copie de blocs et du filtrage des détails superflus grâce à l'algorithme RDOQ (Rate-Distortion Optimized Quantization) a été accélérée. En mode multithread, pour économiser des ressources, l'algorithme de détermination de la transmission du contenu de l'écran est désormais appliqué uniquement aux images I.
- Un drapeau expérimental « —fast-decode 3 » a été ajouté pour accélérer le décodage d'images statiques.
- Un drapeau « —fgs-table » a été ajouté, activant le support des tables de grain (film grain), et l'API FILM_GRAIN_EVENT pour définir les paramètres de grain liés aux images.
- Augmentation de la vitesse d'encodage sans perte.
- Dans le mode d'encodage à faible latence, le traitement des blocs (tile) a été parallélisé.
- Une option « max_allowed_consecutive_frames_skips » a été ajoutée pour configurer le saut de cadres en mode de maintien d'un débit binaire constant (CBR).
- Un paramètre « max_hierarchical_levels » a été ajouté pour contrôler le pool de buffers utilisé lors du changement de taille des groupes d'images intermédiaires (mini-GOP — Group of Pictures).
- Une option de compilation « —mobile-build » (dans CMake — MOBILE_BUILD) a été ajoutée pour créer une bibliothèque 8 bits pour RTC, VOD et AVIF. Des options CONFIG_ENABLE_* ont été ajoutées pour désactiver la compilation des outils d'encodage inutilisés.
- Pour les systèmes x86, des gestionnaires 8 bits CDEF basés sur les instructions AVX2 et SSE4.1 ont été implémentés, ainsi que des transformations directes 16 bits basées sur les instructions AVX2 et AVX-512. Un code optimisé à l'aide des instructions SSE4.1 pour la prédiction inter-image, la manipulation de palettes et les transformations a été ajouté. Les gestionnaires pour le quantification, la copie de blocs, le calcul des distorsions et l'évaluation des différences subpixel ont été optimisés.
- Pour les systèmes ARM, des variantes de gestionnaires accélérées par les instructions processeur Neon ont été ajoutées.
Source : opennet.ru
