Доступна библиотека libjpeg-turbo 2.0

Состоялся релиз libjpeg-turbo 2.0.0, высокопроизводительной библиотеки для кодирования и декодирования изображений в формате JPEG. Libjpeg-turbo представляет собой совместимый на уровне API/ABI форк классической библиотеки libjpeg, нацеленный на обеспечение максимальной скорости кодирования и декодирования. Кроме стандартного libjpeg API библиотека предоставляет собственный TurboJPEG API и ряд расширений с моделями представления цвета, дающих возможность сжимать изображения в 32-разрядные пиксельные буферы (RGBX, XBGR) или декодировать из них. Код распространяется под тремя BSD-подобными лицензиями IJG, модифицированой BSD и zlib, бинарные сборки подготовлены для Linux (rpm, deb), macOS и Windows.

По сравнению с libjpeg библиотека libjpeg-turbo позволяет добиться ускорения операций кодирования и декодирования JPEG в 2–4 раза, благодаря использованию инструкций SIMD (MMX, SSE2, NEON, AltiVec VMX) на архитектурах x86, x86–64, PowerPC и ARM. На других архитектурах ускорение не столь значительное, но за счёт применения оптимизированных функций кодирования Хаффмана библиотека всё равно заметно быстрее libjpeg и близка по своим показателям к высококачественным проприетарным кодекам JPEG. Отдельно развивается mozjpeg, форк libjpeg-turbo, который движется в сторону оптимизации размера результирующих изображений.

Основные новшества:

  • Обеспечено применение инструкций AVX2 для ускорения преобразований цветовых пространств, хроматического сэмплирования и целочисленного квантования, целочисленных алгоритмов DCT/IDCT. На системах с поддержкой AVX2 применение новых оптимизаций позволило увеличить производительность на 13–36% для 64-разрядных систем и на 11–21% для 32-разрядных;
  • Система сборки переведена с Autotools на использование CMake
  • В API представлены новые функции jpeg_read_icc_profile () и jpeg_write_icc_profile () для извлечения данных ICC-профиля из JPEG-файла;
  • Модернизирован код обработки ошибок в TurboJPEG API;
  • Задействованы SIMD-оптимизации с использованием инструкций MMI для процессоров Loongson при выполнении преобразования цветовых пространств RGB-to-YCbCr и YCbCr-to-RGB, хроматическом преобразовании 4:2:0, целочисленном квантовании и целочисленных алгооритмах DCT/IDCT. Новые оптимизации позволили ускорить сжатие на 70–100%, а распаковку в 2–3.5x раза.
  • Реализовано SIMD-ускорение кодирования Хаффмана с использованием инструкций SSE2 для платформ x86 и x86–64, которое увеличило скорость сжатия полноцветных JPEG на 85–90%;
  • Улучшен процесс распаковки изображений в цветовой схеме CMYK;

© OpenNet