# 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, управления контекстом декодера и настройки параметров обработки (подробнее с документацией можно ознакомиться [здесь](https://code.videolan.org/videolan/dav1d/)):

### Управление контекстом декодера

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()` — установка пользовательского аллокатора для кадров.
