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, где также можно найти примеры кода и сообщество разработчиков для обсуждения вопросов. Библиотека активно поддерживается, регулярно обновляется и тестируется на различных платформах, что гарантирует её надёжность.