Об этом проекте

libplacebo — это автономная библиотека алгоритмов обработки и рендеринга видео с GPU-ускорением, изначально созданная на основе mpv. Она предназначена для скрытия деталей GPU-программирования, цветовых пространств, субдискретизации и метаданных изображения за многоуровневыми API, при этом позволяя крупным приложениям сохранять низкоуровневый контроль. Её функции рендеринга включают оптимизированное масштабирование вверх и вниз с полярными фильтрами, такими как Jinc, сглаживание, анти-рингинг и гамма-корректное масштабирование. Обеспечивается динамический HDR-тонмаппинг с измерением гистограммы сцены в реальном времени, обнаружением смены сцен, контролем экспозиции, перцептивным растяжением гаммы и восстановлением контраста. Поддержка Dolby Vision включает преобразование Profile 5 в HDR/PQ или SDR, чтение побочных данных и решейпинг при сборке с соответствующей зависимостью. Движок управления цветом поддерживает мягкое гамма-отображение, ICC-профили, эмуляцию ITU-R BT.1886, компенсацию чёрной точки и пользовательские 3DLUT-файлы .cube. Система пользовательских шейдеров может принимать GLSL или mpv .hook-шейдеры, что позволяет использовать такие шейдеры, как RAVU, FSRCNNX и Anime4K. Библиотека также предоставляет синтез зерна плёнки AV1 и H.274, дебэндинг, деинтерлейсинг в стиле YADIF и гамма-корректный дизеринг, включая диффузию ошибок. Поддерживаемые графические бэкенды: Vulkan 1.2, включая MoltenVK, OpenGL с GLSL 130 или новее, OpenGL ES 3.0 или новее, и Direct3D 11 с feature level 9_1 или новее. Также экспортируется фиктивный интерфейс только для CPU. Высокоуровневые помощники включают pl_render_image и взаимодействие с медиафреймворками на основе AVFrame. Публичный API организован по уровням. Уровень 0 предлагает логирование, кэширование, математику цветовых пространств, фильтры, тонмаппинг, гамма-отображение и помощники дизеринга. Уровень 1 предоставляет абстракции GPU и свопчейна, а также реализации Vulkan, OpenGL, D3D11 и фиктивную. Уровень 2 раскрывает генерацию GLSL и шейдерные процедуры для преобразования цветовых пространств, пользовательских шейдеров, деинтерлейсинга, дизеринга, зерна плёнки, ICC-профилей, LUT, сэмплирования, дебэндинга и масштабирования. Уровень 3 диспетчеризует и кэширует полные шейдеры, а уровень 4 предоставляет высокоуровневый рендерер, каркас опций, очередь кадров, помощники загрузки текстур, взаимодействие с Dav1dPicture и FFmpeg libav. Проект включает демонстрационную программу plplay и примеры в каталогах demos и tests. Он принят VLC как опциональный путь вывода видео на Vulkan и FFmpeg как видеофильтр на Vulkan. libplacebo использует систему сборки Meson с Ninja. Рекурсивный клон подтягивает встроенные зависимости, хотя большинство зависимостей опциональны. Полезные опциональные компоненты включают glslang или shaderc, lcms2, libdovi, поддержку Vulkan с Python Jinja2 для генерации кода, поддержку OpenGL через glad2 и xxhash. Цели тестов и бенчмарков настраиваются через опции Meson. Библиотека распространяется под LGPLv2.1 или новее, при этом в README отмечается, что для конкретных случаев использования может рассматриваться более разрешительная лицензия BSD2.