FFmpeg 9.0 «Lei»: rediseño de swscale, Vulkan y decodificación nativa de WebP animado

Fuentes: FFmpeg 9.0: swscale rewrite, Vulkan, WebP, assembly and a large cleanup

FFmpeg 9.0 «Lei», publicado cuatro meses y medio después de la versión 8.1, incorpora más de 2.200 commits de 160 autores, modifica 1.781 archivos, añade cerca de 85.000 líneas y elimina más de 33.000. Como ocurre en cada cambio de versión mayor, los siete componentes (libavutil 61, libavcodec 63, libavformat 63, libavdevice 63, libavfilter 12, libswscale 10 y libswresample 7) experimentan una ruptura de ABI que ha permitido una limpieza profunda del código.

El trabajo más relevante es la reescritura de swscale, liderada por Niklas Haas con más de 300 commits: la arquitectura, de veinte años de antigüedad, se sustituye por un modelo basado en listas de operaciones elementales y un optimizador que genera cadenas de kernels para CPU o GPU mediante un backend Vulkan SPIR-V. La conversión se calcula ahora con aritmética racional de 64 bits exacta, lo que elimina múltiples comprobaciones de desbordamiento. Las rutas nuevas siguen marcadas como SWS_UNSTABLE.

En libavcodec, con más de 700 commits, destaca la decodificación nativa de WebP animado (con demuxer), cerrando un ticket abierto en 2015; el soporte de tramas de 960 muestras en el decodificador AAC para DAB+; mejoras en NVENC con AV1 y entradas de 12 bits; y un codificador y muxer para la consola Playdate. Además, el ensamblaje x86 se moderniza eliminando el MMX residual y añadiendo rutas SSE2 y AVX2; ARM gana optimizaciones NEON en yuv2rgb y HEVC; y RISC-V recibe mejoras para HEVC y utilidades de píxeles.

En vídeo de cámara, el decodificador ProRes RAW se sincroniza con la implementación de referencia y suma variantes GPU (Vulkan y VideoToolbox), mientras que FFV1 aprende a codificar patrones Bayer sin debayering previo, con codificador y decodificador GPU acelerados por Vulkan. El resto de novedades incluye un filtro v360 sobre Vulkan, un decodificador APV en GPU y la eliminación de la compilación de shaders en tiempo de ejecución.