Быстрая библиотека кодирования JPEG

Кто-нибудь знает о бесплатной библиотеке кодирования jpeg с открытым исходным кодом для C/С++? В настоящее время я использую ImageMagick, который прост в использовании, но он довольно медленный. Я сравнил его с оценкой Intel Performance Primitives, и скорость IPP безумна. К сожалению, он также стоит 200 $, и мне не нужно 99% IPP). Также он будет работать только на Intel.

Кто-нибудь делает какие-либо тесты? Любые другие хорошие библиотеки там быстрее, чем ImageMagick?

Изменить: я использовал 8-битную версию ImageMagick, которая должна быть быстрее.

Ответ 1

ImageMagick использует библиотеку libjpeg (a.k.a Independent JPEG Group). Если вы улучшите скорость libjpeg, скорость изображения ImageMagick JPEG будет увеличиваться.

Есть несколько вариантов:

  • Скомпилируйте оптимизированный libjpeg. Если у вас есть современный gcc и, по крайней мере, Pentium 4, вы можете попробовать -O3 -msse2 и посмотреть, может ли он увеличить вашу скорость. Затем вы можете использовать LD_LIBRARY_PATH или какой-либо другой способ загрузить ваш libjpeg вместо системного.
  • Попробуйте libjpeg-mmx. Он не поддерживается и, предположительно, глючит и имеет недостатки безопасности, но может привести к увеличению скорости в вашем случае.

Ответ 3

Я считаю, что GIL, являющийся библиотекой в ​​Boost, содержит способ сохранения данных изображения в формате JPEG. Тем не менее, я не знаю его скорости. Учитывая, что библиотека спонсируется Adobe, я бы ожидал, что это будет хорошо сделано.

Ответ 4

AMD предлагает Framewave, альтернативу open source для IPP.

Ответ 5

Если вы посмотрите вокруг, вы можете найти старую версию библиотеки Intel JPEG. Это не openource, но быстро. Это было достаточно быстро, чтобы получить 25 кадров в секунду на 733 МГц P-III.

Ответ 6

Также существует Independent JPEG Group, которая довольно старая, и я не могу ручаться за ее скорость. Но он должен быть стабильным.

Найдено через эту страницу.

Ответ 7

Я сделал некоторую временную кодировку 512x512 jpeg, используя 100% качество (я знаю, что 100% не является без потерь). В основном ImageMagick был только немного медленнее, чем libjpeg. Для 100 изображений разница составляла порядка 10-й секунды. Затем я получил libjpeg с расширением SIMD (http://cetus.sakura.ne.jp/softlab/jpeg-x86simd/jpegsimd.html#source) и эта вещь в 6-10 раз быстрее. Обратите внимание, что это действительно зависит от типа изображения. Изображения с большим количеством черных очень быстры, изображения с деталями повсюду очень медленные - я считаю, что это алгоритм кодирования. Возможно, мне придется попробовать libjpeg-mmx, потому что он выглядит более уверенным, чем японская версия, которую я получил, что даже не знаю, что такое лицензия.

Я также попытался заставить Framewave работать и даже не мог сбить его с ног. В файлах заголовков отсутствует определение какой-либо структуры, и форумы не обеспечивают абсолютно никакой поддержки. Я не могу поверить, что это "спонсируется AMD".