Анонсирован (http://sourceforge.net/p/libjpeg-turbo/mailman/message/33210889/) выпуск проекта libjpeg-turbo 1.4.0 (http://www.libjpeg-turbo.org/), в рамках которого развивается высокопроизводительная библиотека кодирования и декодирования изображений в формате JPEG. Libjpeg-turbo представляет собой совместимый на уровне API/ABI форк классической библиотеки libjpeg (http://ijg.org/), нацеленный на обеспечении максимальной скорости кодирования и декодирования. В свою очередь, от libjpeg-turbo ответвилась библиотека mozjpeg, которая движется в сторону оптимизации размера результирующих изображений.Благодаря использованию инструкций SIMD (MMX, SSE2, NEON) на архитектурах x86, x86-64, and ARM, libjpeg-turbo позволяет добиться ускорения операций кодирования и декодирования JPEG в 2-4 раза, по сравнению с libjpeg. На других архитектурах ускорение не столь значительное, но за счёт применения оптимизированных функций кодирования Хаффмана библиотека всё равно заметно быстрее libjpeg и близка по своим показателям к высококачественным проприетарным кодекам JPEG. Кроме стандартного libjpeg API библиотек также предоставляет расширенный TurboJPEG API, а также ряд расширений с моделями представления цвета, позволяющих сжимать в 32-разрядные пиксельные буферы (RGBX, XBGR) или декодировать из них.
Основные новшества:
- Для ускорения на платформах MIPS задействованы DSPr2-совместимые SIMD-инструкции, что на 70-80% ускорило сжатие полноцветных JPEG и на 25-35% ускорило декодирование;
- В коде кодирования Хаффмана для подсчета битов на платформах ARM и ARM64 задействованы инструкции clz и bsr, что позволило на 64Кб сократить потребление памяти. На двух протестированных Android-устройствах наблюдался рост производительности на 10-20%, при этом ещё на двух наблюдалось падение производительности на ~3-4% при использовании кода ARMv6 и рост производительности на ~3-4% для кода ARMv7. Добавлено использование 64-рарядных SIMD-инструкций ARM для ускорения преобразования цветов YCC-to-RGB и применения алгоритмов IDCT;
- Для закодированных с использованием таблиц Хаффмана JPEG-изображений добавлена возможность подстановки таблиц по умолчанию, если данные таблицы отсутствуют в заголовке файла с изображением. Например, для экономии места в видео в формате Motion JPEG кадры часто не содержат подобных таблиц;
- Улучшена точность и производительность реализации алгоритма инвертирования DCT с плавающей точкой, не применяющего SIMD-инструкции.
- В libjpeg API добавлена поддержка цветовой модели JCS_RGB565, что позволяет декодировать изображения JPEG в пиксельный формат RGB565 (16-bit).
- Удалены устаревшие возможности, такие как поддержка не-ANSI компиляторов и модель памяти MS-DOS;
- Расширен TurboJPEG API: поддержка CMYK, поддержка операции масштабирования в функции decompress-to-YUV, поддержка задания произвольного заполнения строк при генерации плоских YUV-изображений (YUV planar), возможность сжатия JPEG-изображений на основе исходного YUV-изображения, поддержка цветовой субдискретизации 4:1:1. Значительно переработан Java API для работы с YUV-изображениями, добавлена поддержка кодирования YUV-изображения из произвольной позиции в буфере;
- Возобновлена поддержка JPEG с 12-битами на компонент (при сборке необходимо указать --with-12bit), при включении которой будут отключены все специфичные libjpeg-turbo оптимизации и станет недоступен TurboJPEG API (но останутся доступны расширения, такие как модели представления цвета);
- Пакет для OS X теперь собирается с использованием pkgbuild и productbuild вместо PackageMaker.
URL: http://sourceforge.net/p/libjpeg-turbo/mailman/message/33210889/
Новость: http://www.opennet.me/opennews/art.shtml?num=41421