После полутора лет разработки представлен (https://sourceforge.net/p/libjpeg-turbo/mailman/message/3514.../) выпуск libjpeg-turbo 1.5.0 (http://www.libjpeg-turbo.org/), высокопроизводительной библиотеки для кодирования и декодирования изображений в формате JPEG. Libjpeg-turbo представляет собой совместимый на уровне API/ABI форк классической библиотеки libjpeg (http://ijg.org/), нацеленный на обеспечение максимальной скорости кодирования и декодирования. Кроме стандартного libjpeg API библиотека предоставляет собственный TurboJPEG API и ряд расширений с моделями представления цвета, дающих возможность сжимать изображения в 32-разрядные пиксельные буферы (RGBX, XBGR) или декодировать из них. Код распространяется (https://github.com/libjpeg-turbo/libjpeg-turbo) под тремя BSD-подобными лицензиями IJG, модифицированой BSD и zlib, бинарные сборки подготовлены (https://sourceforge.net/projects/libjpeg-turbo/files/1.5.0/) для Linux (rpm, deb), OS X и Windows.
По сравнению с libjpeg библиотека libjpeg-turbo позволяет добиться ускорения операций кодирования и декодирования JPEG в 2-4 раза, благодаря использованию инструкций SIMD (MMX, SSE2, NEON) на архитектурах x86, x86-64, PowerPC и ARM. На других архитектурах ускорение не столь значительное, но за счёт применения оптимизированных функций кодирования Хаффмана библиотека всё равно заметно быстрее libjpeg и близка по своим показателям к высококачественным проприетарным кодекам JPEG. Отдельно развивается mozjpeg (https://www.opennet.dev/opennews/art.shtml?num=41371), форк libjpeg-turbo, который движется в сторону оптимизации размера результирующих изображений.
Основные новшества (https://github.com/libjpeg-turbo/libjpeg-turbo/releases):
- Для архитектуры 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.
URL: https://sourceforge.net/p/libjpeg-turbo/mailman/message/3514.../
Новость: http://www.opennet.dev/opennews/art.shtml?num=44563