Спустя пять лет с момента формирования ветки 2.x представлен релиз libjpeg-turbo 3.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, который движется в сторону оптимизации размера результирующих изображений.
Основные новшества:
- Добавлена поддержка цветовой субдискретизации 4:1:1, позволяющей без потери качества преобразовывать, обрезать и поворачивать JPEG-изображения с субдискретизацией 4:1:1, а также распаковывать их и переводить в цветовую модель YUV.
- Значительно ускорены вычисления оптимальных таблиц Хаффмана. Для мелких изображений (256×256) изменение позволило до двух раз сократить время сжатия.
- Добавлена возможность применения арифметического энтропийного кодирования для JPEG-изображений с 12-битным представлением цвета на канал.
- С целью устранения имевшихся ограничений и повышения расширяемости значительно переработан API TurboJPEG. Например, все Си-функции теперь снабжены префиксом “tj3”. Многие флаги и режимы преобразованы из аргументов функций в общие параметры API.
- В API libjpeg и TurboJPEG добавлена поддержка изображений с 12 и 16 битами цветности на канал в режимах с потерей и без потери качества.
- Добавлен режим работы с JPEG-файлами без потери качества, который доступен для изображений с 8, 12 и 16 битами цветности на канал. Добавлена новая функция jpeg_enable_lossless() и опция командной строки “-lossless”.
- Удалены устаревшие поля, конструкторы и методы в TurboJPEG Java API.
В дальнейшем автор libjpeg-turbo намерен ограничить работу над проектом и выпускать только обновления с исправлениями ошибок. Разработка новой ветки 3.1 не начнётся пока не удастся получить финансирование работы над проектом. Сейчас получаемых для libjpeg-turbo средств хватает на 8-10 часов работы в месяц и в проекте наблюдается перерасход – при финальной стадии стабилизации ветки 3.0 ресурсы потрачены до сентября 2024 года. До получения финансирования работа над реализацией и рассмотрением новых возможностей для libjpeg-turbo будет приостановлена, а техническая поддержка выпусков будет ограничена, как минимум в течение следующих 15 месяцев. Основной доход автор libjpeg-turbo получает от других его проектов – VirtualGL и TurboVNC, которым он намерен уделить первичное внимание, чтобы не повторить негативный опыт разработки ветки libjpeg-turbo 2.0, в котором отсутствие контроля над трудозатратами привело к влезанию разработчика в долги.