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

8 июня 2016 года

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

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

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

  • Для архитектуры PowerPC реализована поддержка полноценного ускорения с использованием инструкций AltiVec VMX (128-разрядный SIMD), что позволило увеличить производительность кодирования в 3-4 раза и декодирования в 2-2.5 раза;
  • Добавлены две новые функции libjpeg API: jpeg_skip_scanlines() и jpeg_crop_scanline() для частичного декодирования изображений JPEG;
  • В классах TJCompressor и TJDecompressor, представленных в TurboJPEG Java API, реализован интерфейс Closeable, что позволяет использовать данные классы в выражениях try-with-resources;
  • Буферы с частями исходного изображения теперь передаются в функции

TurboJPEG C API и в jpeg_mem_src() в режиме только для чтения, не допускающем внесение изменений;

  • Добавлена переменная окружения JSIMD_FORCENONE позволяющая во время работы отключить применение оптимизаций SIMD для архитектуры x86-64;
  • В TJBench добавлена опция "-nowrite" запрещающая вывод изображений в процессе измерения производительности (позволяет минимизировать влияние задержек при дисковой записи);
  • На SSE2-совместимых платформах x86 и x86-64, а также на NEON-совместимых 32- и 64-разрядных платформах ARM реализовано SIMD-ускорение кодирования Хаффмана, которое позволило увеличить скорость кодирования полноцветных JPEG на 10-15% для современных процессоров Intel и AMD, на 30% для iPhone 4S и CPU Cortex-A9, на 6-8% для Nexus 5X, CPU Cortex-A53 и Cortex-A57, на 40% для iPhone 5S и Apple A7;
  • На 64-разрядных процессорах ARM (ARMv8) задействованы инструкции NEON для ускорения типовых алгоритмов сжатия и распаковки, что позволило ускорить операции сжатия полноцветных JPEG в среднем на 73% на CPU Cavium ThunderX и в 2-2.5 раза на CPU Cortex-A53 и Cortex-A57. Скорость распаковки увеличилась в 2 раза на CPU Cavium ThunderX и на 15% на CPU Cortex-A53.

Источники править


 
 
Creative Commons
Эта статья содержит материалы из статьи «Доступна библиотека libjpeg-turbo 1.5.0», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.