Второй выпуск dav1d, декодировщика AV1 от проектов VideoLAN и FFmpeg
Сообщества VideoLAN и FFmpeg опубликовали второй выпуск (0.2) библиотеки dav1d с реализацией альтернативного свободного декодировщика формата кодирования видео AV1. Код проекта написан на языке Си (C99) с ассемблерными вставками (NASM/GAS) и распространяется под лицензией BSD. Реализована поддержка архитектур x86, x64, ARMv7 и ARMv8, и операционных систем Linux, Windows, macOS, Android и iOS.
Библиотека dav1d поддерживает все возможности AV1, включая расширенные виды субдискретизации и все заявленные в спецификации параметры управления глубиной цвета (8, 10 и 12 бит). Работа библиотеки протестирована на большой коллекции файлов в формате AV1. Ключевой особенностью dav1d является ориентация на достижение максимально возможной производительности декодирования и обеспечение качественной работы в многопоточном режиме.
В новой версии проведена работа по увеличению производительности при обработке потоков с 8-битовым кодированием цветности на устаревших компьютерах и мобильных устройствах. Добавлены ассемблерные оптимизации, реализованные с использованием инструкций SSSE3 и NEON (ранее оптимизации были ограничены применением инструкций AVX2). Производительность большинства функций на языке Си увеличена в диапазоне от 2 до 20 раз. По сравнению с прошлым выпуском производительность декодирования в однопоточном режиме в среднем выросла в 2.25 раза, а в многопоточном — в 2.5 раза.
В целом dav1d теперь обеспечивает производительность, достаточную для декодирования видео 1080p с частотой 30 кадров в секунду практически на любых процессорах с поддержкой SSSE3.
По сравнению с эталонным декодировщиком aomdec на системах с поддержкой SSSE3, но без инструкций AVX2, dav1d работает в 2.5 — 3 раза быстрее для потоков с 8-разрядной глубиной цвета и цветовой субдискретизацией 4:2:0 (aomdec использует 4 потока, а dav1d — 8 потоков для раздельной обработки кадров и 4 для сшивания фрагментов). В однопоточном режиме производительность примерно на одном уровне.
При использовании инструкций SSE4.1 (поддерживаются на 95,82% систем по данным сервиса Steam), dav1d пока немного отстаёт от кодировщика aomdec в однопоточном режиме, но остаётся в два раза быстрее в многопоточном режиме.
При использовании инструкций AVX2 по сравнению с прошлым выпуском производительность увеличена на 1–2% (основные оптимизации были добавлены ранее). При этом dav1d остаётся быстрее aomdec на 40% в однопоточном режиме и в 2.5–5 раз в многопоточном.
На системах ARM64 (Snapdragon 835) с инструкциями NEON производительность в среднем возросла на 38% в однопоточном режиме и на 53% в многопоточном. На 32-разрядных процессорах ARMv7 прирост производительности составил 62% и 46% соответственно.
Напомним, что видеокодек AV1 разработан альянсом Open Media (AOMedia), в котором представлены такие компании, как Mozilla, Google, Microsoft, Intel, ARM, NVIDIA, IBM, Cisco, Amazon, Netflix, AMD, VideoLAN, CCN и Realtek. AV1 позиционируется как общедоступный и не требующий оплаты отчислений свободный формат кодирования видео, который заметно опережает H.264 и VP9 по уровню сжатия. Для всего диапазона протестированных разрешений в среднем AV1 обеспечивает тот же уровень качества при уменьшении битрейта на 13% по сравнению с VP9 и на 17% по сравнению с HEVC. На высоких битрейтах выигрыш увеличивается до 22–27% для VP9 и до 30–43% для HEVC. В тестах Facebook AV1 обогнал по уровню сжатия main profile H.264 (x264) на 50.3%, high profile H.264 на 46.2%, а VP9 (libvpx-vp9) на 34.0%.
Дополнительно можно отметить публикацию чернового варианта спецификации для нового формата кодирования изображений AVIF, в котором задействованы технологии внутрикадрового сжатия из AV1. После завершения рецензирования черновика техническим комитетом альянса AOM (Alliance for Open Media) планируется опубликовать финальный вариант спецификации (сейчас спецификация находится на стадии кандидата в релизы — 1.0.0-rc). AVIF поддерживает как изображения в HDR (High Dynamic Range) и цветовом пространстве Wide-gamut, так и в стандартном динамическом диапазоне (SDR). Контейнер для распространения сжатых данных в AVIF полностью аналогичен HEIF.
© OpenNet