libyuv
Библиотека libyuv для конвертации, обработки и оптимизации видеоформатов YUV. Предоставляет высокопроизводительные инструменты для работы с цветовыми пространствами и масштабирования изображений.
Домашняя страница: https://chromium.googlesource.com/libyuv/libyuv
Доступные версии
Версия | Релиз | Архитектура | Лицензия | Дата сборки | Размер | Версии ОС | Подробности |
---|---|---|---|---|---|---|---|
0 | 1.niceos5 | x86_64 | BSD-3-Clause | 25 апр. 2025 г. | 744,023 МиБ | Подробности |
Описание
Обзор библиотеки libyuv
Библиотека libyuv представляет собой мощный инструмент с открытым исходным кодом, разработанный для работы с видео и изображениями в формате YUV. Она широко используется в мультимедийных приложениях, таких как видеокодеки, потоковая передача и обработка изображений. Основное назначение libyuv — обеспечение высокой производительности при конвертации между различными цветовыми пространствами, масштабировании видео и выполнении других операций с данными YUV. Данная библиотека оптимизирована для работы на различных архитектурах, включая x86, ARM, и использует SIMD-инструкции для ускорения вычислений.
Основные возможности libyuv
Библиотека libyuv предоставляет разработчикам широкий набор функций для работы с видео и изображениями. Вот ключевые возможности, которые делают её популярной среди разработчиков мультимедийного ПО:
- Конвертация цветовых пространств: Поддержка преобразования между форматами YUV (например, NV12, NV21, YUY2) и RGB, а также работа с различными субдискретизациями (4:2:0, 4:2:2).
- Масштабирование изображений: Высококачественное изменение размеров видео и изображений с минимальными потерями качества.
- Оптимизация производительности: Использование SIMD (Single Instruction, Multiple Data) для ускорения операций на процессорах с поддержкой таких инструкций (SSE, NEON).
- Кроссплатформенность: Поддержка работы на Linux, Windows, macOS, а также мобильных платформах Android и iOS.
- Интеграция: Простая интеграция с другими мультимедийными фреймворками, такими как FFmpeg или WebRTC.
Установка libyuv в Найс.ОС
Для установки библиотеки libyuv в операционной системе Найс.ОС, использующей пакетный менеджер dnf, выполните следующую команду:
sudo dnf install libyuv
После установки вы можете проверить наличие библиотеки, выполнив:
dnf info libyuv
Также для разработки приложений может потребоваться установка пакета с заголовочными файлами и инструментами разработчика:
sudo dnf install libyuv-devel
Примеры использования libyuv
Библиотека libyuv часто используется в проектах, связанных с обработкой видео. Ниже приведены примеры типичных задач, которые можно решить с её помощью.
1. Конвертация YUV в RGB
Одна из самых распространённых задач — преобразование данных из формата YUV в RGB для отображения на экране. Пример использования API библиотеки для конвертации:
#include
int main() {
const int width = 1280;
const int height = 720;
uint8_t* yuv_data = // указатель на данные в формате YUV
uint8_t* rgb_data = new uint8_t[width * height * 3];
// Конвертация NV12 в RGB
libyuv::NV12ToRGB24(yuv_data, width, yuv_data + width * height, width, rgb_data, width * 3, width, height);
// Использование данных RGB
delete[] rgb_data;
return 0;
}
Этот код демонстрирует преобразование видеоформата NV12 (широко используемого в видеокодеках) в формат RGB24, пригодный для отображения.
2. Масштабирование видео
Другая популярная задача — изменение разрешения видео. Например, уменьшение видео с 1080p до 720p:
#include
int main() {
const int src_width = 1920;
const int src_height = 1080;
const int dst_width = 1280;
const int dst_height = 720;
uint8_t* src_yuv = // указатель на исходные данные YUV
uint8_t* dst_yuv = new uint8_t[dst_width * dst_height * 3 / 2];
// Масштабирование с использованием высококачественного фильтра
libyuv::I420Scale(src_yuv, src_width, src_yuv + src_width * src_height, src_width / 2,
src_yuv + src_width * src_height * 5 / 4, src_width / 2,
src_width, src_height,
dst_yuv, dst_width, dst_yuv + dst_width * dst_height, dst_width / 2,
dst_yuv + dst_width * dst_height * 5 / 4, dst_width / 2,
dst_width, dst_height, libyuv::kFilterBox);
delete[] dst_yuv;
return 0;
}
Этот пример показывает, как масштабировать видео в формате I420 с использованием фильтра высокого качества (kFilterBox).
Преимущества использования libyuv
Библиотека libyuv выделяется среди аналогов благодаря ряду преимуществ:
- Высокая производительность: Оптимизация под современные процессоры позволяет выполнять операции с видео в реальном времени даже на устройствах с ограниченными ресурсами.
- Простота интеграции: API библиотеки интуитивно понятно и хорошо документировано, что упрощает её использование в проектах.
- Широкая поддержка форматов: Работа с большинством популярных форматов YUV и RGB делает библиотеку универсальной.
Применение в реальных проектах
Библиотека libyuv активно используется в крупных проектах, таких как Google Chrome (для обработки видео в WebRTC), а также в мобильных приложениях для видеосвязи и потокового вещания. Она идеально подходит для задач, связанных с видеоконференциями, стримингом, обработкой видеопотоков с камер и другими мультимедийными приложениями.
Документация и поддержка
Официальная документация по libyuv доступна на GitHub, где также можно найти примеры кода и сообщество разработчиков для обсуждения вопросов. Библиотека активно поддерживается, регулярно обновляется и тестируется на различных платформах, что гарантирует её надёжность.