dav1d
Высокопроизводительный программный декодер видеокодека AV1 с открытым исходным кодом, разработанный сообществом VideoLAN и FFmpeg. Библиотека реализует полную поддержку спецификации AV1, включая все инструменты кодирования и форматы пикселей, и оптимизирована для эффективного использования современных процессорных архитектур. dav1d использует низкоуровневые оптимизации (SIMD, многопоточность) для достижения высокой скорости декодирования при минимальном потреблении ресурсов, что делает его подходящим для использования в медиаплеерах, веб-браузерах и embedded-системах.
Особенности
- полная поддержка стандарта AV1 (Alliance for Open Media Video Codec);
- высокая производительность благодаря агрессивной оптимизации (SIMD, многопоточность);
- низкое потребление памяти и эффективное управление кэшем процессора;
- поддержка аппаратного ускорения через API (D3D11VA, VAAPI, Vulkan);
- кроссплатформенность (Linux, Windows, macOS, Android, iOS).
Основные компоненты
Библиотека предоставляет API для декодирования видео в формате AV1, управления контекстом декодера и настройки параметров обработки (подробнее с документацией можно ознакомиться здесь):
Управление контекстом декодера
API для управления жизненным циклом декодера, включая создание и уничтожение контекста, настройку параметров и управление внутренним состоянием. Контекст хранит всю информацию о текущем сеансе декодирования, включая буферы, настройки и состояние потоков:
dav1d_open()— создание нового контекста декодера с указанием параметров;dav1d_close()— закрытие контекста и освобождение ресурсов;dav1d_flush()— сброс внутреннего состояния декодера (очистка буферов).
Декодирование кадров
Основные функции для обработки сжатого видеопотока и получения декодированных кадров. Поддерживают асинхронный и синхронный режимы работы, позволяя эффективно использовать многопоточность и аппаратное ускорение:
dav1d_send_data()— передача сжатых данных (OBU) в декодер для обработки;dav1d_get_picture()— получение декодированного кадра из внутреннего буфера декодера;dav1d_picture_unref()— уменьшение счетчика ссылок на кадр и освобождение памяти.
Настройка параметров декодера
Интерфейс конфигурации декодера, позволяющий оптимизировать производительность для конкретных сценариев использования. Включает настройку количества потоков, режимов аппаратного ускорения, форматов вывода и параметров качества:
dav1d_default_settings()— инициализация структуры настроек значениями по умолчанию;dav1d_apply_settings()— применение измененных настроек к контексту декодера;dav1d_get_frame_delay()— получение информации о задержке декодирования.
Управление памятью и буферами
Система управления памятью с поддержкой пользовательских аллокаторов и буферов. Позволяет интегрировать библиотеку в существующие системы управления ресурсами, минимизируя копирование данных и обеспечивая эффективное использование памяти:
dav1d_data_wrap()— создание объекта данных из пользовательского буфера с указанием функции освобождения;dav1d_data_unref()— уменьшение счетчика ссылок на объект данных;dav1d_picture_allocator()— установка пользовательского аллокатора для кадров.