2009-05-15 2 views
10

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

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

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

+1

Что именно «медленный»? Можете ли вы дать цифры? – lothar

+0

На данный момент нет.Все, что я знаю, это использование% CPU, когда я просто прошу кодировать кучу изображений. Я бы сказал, что IPP на порядок выше. Но я получаю реальные цифры. – Budric

ответ

2

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

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

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

libjpeg-turbo очень стабилен и используется большинством браузеров в настоящее время. Не беспокойтесь о IjG libjpeg. –

1

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

+1

К сожалению, я не могу. Все относятся к Intel, который, конечно же, не предоставляет его больше. Если у вас есть ссылка, я бы хотел ее получить. – Budric

3

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

+0

Спасибо, я пропустил этот, хотя я использую boost. – Budric

+0

Я не уверен, но GIL использует libjpeg для декодирования и кодирования JPEG, поэтому здесь важна производительность libjpeg. – Qubeuc

+0

GIL - это универсальная библиотека обработки изображений, она не реализует никаких операций ввода-вывода и сжатия. Вместо этого, как сказал Qubeuc, он полагается на сторонние библиотеки. В настоящее время расширения GIL IO реализованы для JPEG с использованием libjpeg и PNG с использованием libpng. Возможно, TIFF (libtiff) также доступен, я не уверен. – mloskot

3

AMD предлагает Framewave, альтернативу IPP с открытым исходным кодом.

+0

Вкратце глядя на API, кажется, что они обеспечивают основные принципы JPEG, такие как DCT-преобразование, но я не вижу реальной функции записи, которая даст мне действительный образ JPEG. Вы использовали его? Можете ли вы указать мне на правильную функцию? – Budric

+2

Как и IPP, Framewave представляет собой библиотеку «цепных» кодовых блоков, а не полные функции инструмента. Вы должны сами писать/читать двоичные данные. Это код для чтения и записи JPEG с IPP здесь: http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-code-samples Framewave - это " API-совместимый "с IPP, поэтому все, что должно быть необходимо, заменяет IPP-вызовы Framewave-вызовами. Вызовы используют то же самое именование с разными префиксами (fwiEncodeHuffman8x8_JPEG_16s1u_C1 против ippiEncodeHuffman8x8_JPEG_16s1u_C1). – Tobiesque

1

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

Найдено через this page.

+0

Вот что мы используем. Он отлично работает для того, для чего мы его используем. –

1

Я сделал некоторую временную кодировку в формате JPEG 512x512 с использованием качества 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».

6

Проверьте libjpeg/SIMD, в багажнике TigerVNC (http://www.tigervnc.com). Мы оптимизировали 64-разрядные и 32-разрядные версии, которые почти так же быстро, как IPP при сжатии/распаковке исходных JPEG:

http://www.mail-archive.com/[email protected]/msg00403.html

+0

Я добавил статью к своей вики о том, как ее построить для различных архитектур: http://www.virtualgl.org/DeveloperInfo/Libjpeg – DRC

Смежные вопросы