libjpeg-turbo — кодек для кодирования и декодирования изображений JPEG.

libjpeg-турбо

libjpeg-turbo изначально был основан на libjpeg/SIMD, производной MMX-ускоренной версии libjpeg v6b.

В Linux, когда дело доходит до кодеков, большинство пользователей обычно не беспокоятся об этом, так как во многих дистрибутивах этот вопрос обычно уже решен включением в таргет по умолчанию, в дополнение к просмотру или редактированию приложений, они также вносят свой вклад песка, включая некоторые дополнения.

Но что происходит, когда пользователь хочет улучшить производительность в определенных аспектах, скажем, для редактирования задач или просто для отдыха. В этой части участвуют не все пользователи, но для тех, кто заинтересован, они, как правило, исследуют преимущества и недостатки, которые предлагает каждый формат.





И вот тут-то и вступает в дело кодек, о котором мы сегодня поговорим, а именно то, что как таковой формат изображения JPEG является одним из самых популярных, но это не значит, что он лучший, поскольку есть и другие форматы, которые предлагают много преимуществ по сравнению с этим.





libjpeg-turbo — это решение некоторых недостатков JPEG. против других форматов, поскольку, как указано в их репозитории GitHub:

libjpeg-turbo — это кодек изображений JPEG, который использует инструкции SIMD для ускорения эталонного сжатия и распаковки JPEG в системах x86, x86-64, Arm, PowerPC и MIPS, а также прогрессивного сжатия JPEG в x86, x86-64 и arm. На таких системах libjpeg-turbo вообще в 2-6 раз быстрее libjpeg, при прочих равных условиях. На других типах систем libjpeg-turbo по-прежнему может значительно превосходить libjpeg благодаря высоко оптимизированным процедурам кодирования Хаффмана. Во многих случаях производительность libjpeg-turbo соперничает с проприетарными высокоскоростными кодеками JPEG.

libjpeg-turbo реализует как традиционный API libjpeg, так и менее мощный, но более простой API TurboJPEG. libjpeg-turbo также имеет расширения цветового пространства, которые позволяют сжимать/распаковывать до 32-битных и пиксельных буферов с обратным порядком байтов (RGBX, XBGR и т. д.), а также полнофункциональный интерфейс Java.

libjpeg-турбо является совместимым с API/ABI ответвлением классической библиотеки libjpeg., целью которого является обеспечение максимальной скорости кодирования и декодирования. В дополнение к стандартному API libjpeg библиотека предоставляет собственный API TurboJPEG и ряд расширений с моделями цветопередачи, которые позволяют сжимать изображения в 32-битные пиксельные буферы или декодировать их из них (RGBX, XBGR).





На других архитектурах ускорение не такое значительное, но за счет использования оптимизированных функций кодирования Хаффмана библиотека по-прежнему заметно быстрее чем libjpeg, и приближается по производительности к высококачественным проприетарным кодекам JPEG.

Стоит отметить, что в последнее времяibjpeg-turbo получил новую ветку 3.0 и основные новшества, которые выделиться из этой новой версии, упоминаются следующие:

  • Добавлена ​​поддержка субдискретизации цвета 4:1:1, позволяющая преобразовывать, обрезать и поворачивать изображения JPEG с субдискретизацией 4:1:1 без потери качества, а также распаковывать и преобразовывать их в цветовую модель YUV.
  • Значительно ускорен расчет оптимальных таблиц Хаффмана. Для небольших изображений (256×256) изменение позволило сократить время сжатия до двух раз.
  • Добавлена ​​возможность применять арифметическое энтропийное кодирование для изображений JPEG с 12-битным представлением цвета на канал.
  • API TurboJPEG был значительно переработан для устранения существующих ограничений и повышения расширяемости. Например, все функции C теперь имеют префикс «tj3».
  • Многие флаги и режимы были преобразованы из аргументов функций в общие параметры API.
  • Поддержка изображений с 12 и 16 битами цвета на канал в режимах с потерями и без потерь.
  • Добавлен режим файлов JPEG без потерь, который доступен для изображений с 8, 12 и 16 битами цвета на канал. Добавлена ​​новая функция jpeg_enable_lossless() и параметр командной строки «-lossless».
  • Удалены устаревшие поля, конструкторы и методы в Java TurboJPEG API.




Наконец, следует упомянуть, что в будущем автор libjpeg-turbo намерен ограничить работу над проектом только выпуском обновлений с исправлениями ошибок. Разработка новой версии 3.1 не начнется, пока не будет получено финансирование проекта.

Для интересует код Следует знать, что он распространяется под тремя лицензиями типа BSD IJG, модифицируется BSD и zlib, а готовые бинарники предлагаются для Linux, macOS и Windows. Вы можете проверить детали, а также получить двоичные файлы от по следующей ссылке.








2023-07-09T04:58:49
приложений