Продолжаем отслеживать судьбу изменений, описанных в post/2015/03/29/avcpp_api-2_rework_vexa_pervaja.
Как обычно, объём работ отличается от того, что было запланировано. Итак, что сделано:
- Работа со словарями и поддержка оных во всех местах, где только можно. Это вызвало необходимость разнести открытие входного потока и поиск информации о стриме (
post/2015/07/20/snova_ffmpeg_i_low-latency). Как следствие, добавился новый вызов:
av::FormatContext::findStreamInfo()
. Он может принимать коллекцию словарей для каждого стрима в потоке. - Начата работа над фильтрами. Уже появилась базовая инфраструктура. Но пока нет понимания в каком виде оно должно получиться на выходе.
- В рамках чистки кода тотально переработана обработка ошибок. Теперь это делается через
std::error_code
, который передаётся опциональным аргументом в те функции фейл которых может приводить к неоднозначностям в будущем. Если переменная для кода ошибки не передана, будет выброшено исключениеav::Exception
которое будет содержать данный код. Планируется, что набор исключений расширится под каждую сущность. Данные изменений повлекли достаточно сильные изменений в API, требующие изменений в коде приложений, которые их используют. При обработке ошибок стоит учитывать категорию оных. На дынный момент используется, как минимум три: *avcpp_category()
- для внутренних ошибок AvCpp *ffmpeg_category()
- для ошибок, пришедших от FFmpeg *system_category()
- для системных ошибок, в основном так рапортуются ошибки выделения памяти при помощи встроенныхav_alloc()
(когда владение принимается FFmpeg’ом и он сам освобождает, как следствие, использоватьnew
/new[]
нет возможности). Целесообразность использоватьstd::bad_alloc
обдумывается.
Ну и главное, реорганизация бранчей:
- все наработки первой вехи выделены в отдельный бранч
api-2.0
(исправляются только ошибки) - старый мастер стал бранчем
api-legacy
(для совместимости, самостоятельно тут ничего не исправляется, только принимаются мерж-реквесты) - вся разработка перемещена на бранч
master
Что осталось:
- Интерфейс опций
- Доделать фильтры
- Ревизия и чистка кода в т.ч. примеров.
Планируется, что это будет сделано в следующей, третье вехе.
Как обычно, за отзывы, багрепорты и пул-реквесты буду благодарен.