[Gfoss] libjpeg sucks

a.furieri a lqt.it a.furieri a lqt.it
Lun 26 Lug 2010 09:14:14 CEST


oggi tocca abbassare la cresta (e chiedere umilmente scusa):
anche nel mondo FLOSS ogni tanto si scopre qualche "cappella"

ho appena scoperto che libjpeg [la libreria open source
che gestisce *tutte* le immagini JPEG]  lenta da morire.

Ancor peggio: libjpeg quasi sicuramente  il codec JPEG
pi inefficiente e lento oggi disponibile sul mercato: 
qualsiasi equivalente proprietario gli bagna il naso,
quanto meno su piattaforme x86 / amd64

la causa: 
=========
fin dal tempo dei primi Pentium Intel ha introdotto in 
hardware il set di istruzioni MMX/SSE con lo scopo di 
supportare i codecs multimediali.
Con i Core 2, i7, i5 etc  stato introdotto SSE2 che
 ancora pi potente.
Ma libjpeg ignora del tutto queste istruzioni, mentre
invece i codes proprietari le sfruttano al meglio.

la cura:
========
fortunatamente esiste il progetto libjpeg-turbo.
in pratica  un clone esattamanente identico a libjpeg (stesse
identiche API/ABI), che per gestisce (da assembler) le estensioni 
MMX/SSE2 - in questo modo praticamente di dimezzano i tempi di coding
e decoding. risultati misurati personalmente sul campo (su i5):

coding: 2.5secs -> 1.1secs
decoding: 1.7secs -> 0.9secs

licenza: wxWidgets [LGPL, ma consente static linkage]

riferimenti:
============
http://libjpeg-turbo.virtualgl.org/
http://sourceforge.net/projects/libjpeg-turbo/

commento:
=========
probabilmente una "sega mentale" per qualsiasi uso ordinario.
ma in alcuni ambiti applicativi (penso in particolare ai
server WMS) potrebbe anche segnare una differenza significativa.
ovviamente il beneficio si estende anche ai Tiff/Jpeg

ad ogni modo libjpeg-turbo mi pare assolutamente stabile
ed affidabile.
- fare la build  un piacere (anche su WinOZ MSYS+MinGW)
- occorre preinstallare l'assembler NASM
- dopo di che basta copiare la "nuova" libjpeg al posto
  di quella "di sistema" ... voila, il gioco  fatto :-)

ciao Sandro

P.S. (per Frankie) 
fare un pensierino per debianizzare libjpeg-turbo: perch no ???


Maggiori informazioni sulla lista Gfoss