Se ha publicado la versión 4.3.0 de la biblioteca SVT-AV1 (Tecnología de Video Escalable AV1) con implementaciones del codificador y decodificador del formato de codificación de video AV1, para cuya aceleración se utilizan las extensiones en los procesadores x86_64 y ARM para la paralelización de cálculos de hardware. El proyecto fue creado por Intel en colaboración con Netflix con el objetivo de alcanzar un nivel de rendimiento adecuado para la recodificación de video en tiempo real y su aplicación en servicios que entregan video bajo demanda (VOD). Actualmente, el desarrollo se lleva a cabo bajo los auspicios de la Alianza Open Media (AOMedia), que supervisa el desarrollo del formato de codificación de video AV1. Anteriormente, el proyecto se desarrolló en el marco del proyecto OpenVisualCloud, que también desarrolla codificadores SVT-HEVC y SVT-VP9. El código se distribuye bajo la licencia BSD.
SVT-AV1 se puede construir para sistemas basados en cualquier arquitectura que tenga un compilador que soporte el estándar C99, pero el mejor rendimiento se alcanza en sistemas x86_64, donde se aplican optimizaciones de ensamblador basadas en instrucciones SIMD (preferiblemente con soporte AVX2 en la CPU, aunque como mínimo es suficiente con SSE2). El consumo de memoria depende del número de núcleos de CPU utilizados en la codificación, regulados por la opción "—lp". Debido a la complejidad de los algoritmos utilizados en AV1, se requieren significativamente más recursos para codificar este formato que para otros formatos.
Entre los cambios en la nueva versión de SVT-AV1:
- Se ha optimizado el compromiso entre calidad/velocidad para todos los preajustes, lo que ha permitido reducir la carga en la CPU entre un 5% y un 8% manteniendo el mismo nivel de calidad, así como acortar el tiempo de codificación en un 10-11% en modo multihilo. Se ha acelerado la ejecución de operaciones para excluir modos de codificación ineficaces (MD — Decisión de Modo), el cálculo de vectores de movimiento (MV — Vector de Movimiento) y parámetros de filtros durante la codificación, el cálculo del tamaño de coeficientes de frecuencia, la búsqueda de desplazamientos subpixel y la copia de bloques, así como la eliminación de detalles innecesarios utilizando el algoritmo RDOQ (Cuantificación Optimizada por Tasa-Distorsión). En modo multihilo, para ahorrar recursos, el algoritmo que determina la transmisión del contenido de la pantalla ahora se aplica solo a los fotogramas I.
- Se ha añadido una bandera experimental "—fast-decode 3" para acelerar la decodificación de imágenes estáticas.
- Se ha añadido la bandera "—fgs-table", que habilita el soporte de tablas de grano de película (film grain), y la API FILM_GRAIN_EVENT para establecer los parámetros de grano en relación con los fotogramas.
- Se ha aumentado la velocidad de codificación sin pérdidas.
- En el modo de codificación de baja latencia se ha implementado el procesamiento paralelo de bloques (tile).
- Se ha agregado la opción "max_allowed_consecutive_frames_skips" para ajustar el salto de fotogramas en modo de tasa de bits constante (CBR).
- Se ha añadido el parámetro "max_hierarchical_levels" para controlar el grupo de buffers utilizado al cambiar el tamaño de grupos de fotogramas intermedios (mini-GOP — Grupo de Imágenes).
- Se ha añadido una opción de compilación "—mobile-build" (en CMake — MOBILE_BUILD) para generar una biblioteca de 8 bits para RTC, VOD y AVIF. Se han añadido opciones CONFIG_ENABLE_* para deshabilitar la compilación de herramientas de codificación no utilizadas.
- Se han implementado controladores de 8 bits CDEF para sistemas x86 basados en instrucciones AVX2 y SSE4.1, así como transformaciones directas de 16 bits basadas en instrucciones AVX2 y AVX-512. Se ha añadido código optimizado utilizando instrucciones SSE4.1 para la predicción intercuadro, el trabajo con paletas y las transformaciones. Se han optimizado los controladores para la cuantización, la copia de bloques, el cálculo de distorsiones y la evaluación de diferencias subpíxel.
- Para sistemas ARM se han añadido variantes de controladores acelerados mediante instrucciones de procesador Neon.
Fuente: opennet.ru
