libjpeg-turbo a fost inițial bazat pe libjpeg/SIMD , un derivat accelerat de MMX al libjpeg v6b
În Linux, când vine vorba de codecuri, majoritatea utilizatorilor nu își fac griji, de obicei, deoarece în multe distribuții această problemă este de obicei deja rezolvată, fiind inclusă în țintă în mod implicit, pe lângă vizualizarea sau editarea aplicațiilor, ei contribuie și cu granul lor. de nisip inclusiv unele extra.
Dar ce se întâmplă atunci când un utilizator dorește să îmbunătățească performanța în anumite aspecte, să zicem pentru sarcini de editare sau pentru simplul timp liber. În această parte nu se implică toți utilizatorii, dar pentru cei interesați au tendința de a investiga avantajele și dezavantajele pe care le oferă fiecare format.
Și aici intervine codecul despre care vom vorbi astăzi și anume că, ca atare, formatul de imagine JPEG este unul dintre cele mai populare, dar asta nu înseamnă că este cel mai bun, deoarece există și alte formate care oferă multe avantaje față de aceasta.
libjpeg-turbo este o soluție la unele dintre deficiențele JPEG în comparație cu alte formate, așa cum se menționează în depozitul său GitHub:
libjpeg-turbo este un codec de imagine JPEG care utilizează instrucțiuni SIMD pentru a accelera compresia și decompresia JPEG de referință pe sistemele x86, x86-64, Arm, PowerPC și MIPS, precum și compresia progresivă JPEG pe x86, x86-64 și arm . Pe astfel de sisteme, libjpeg-turbo este în general de 2-6 ori mai rapid decât libjpeg, toate celelalte fiind egale. Pe alte tipuri de sisteme, libjpeg-turbo poate depăși în continuare libjpeg cu o cantitate semnificativă, în virtutea rutinelor sale de codare Huffman extrem de optimizate. În multe cazuri, performanța libjpeg-turbo rivalizează cu cea a codec-urilor JPEG de mare viteză.
libjpeg-turbo implementează atât API-ul tradițional libjpeg, cât și API-ul TurboJPEG mai puțin puternic, dar mai simplu. libjpeg-turbo are, de asemenea, extensii de spațiu de culoare care îi permit să comprima/decomprima la 32 de biți și tampon de pixeli big-endian (RGBX, XBGR, etc.), precum și o interfață Java cu funcții complete.
Libjpeg-turbo este un fork compatibil API/ABI al bibliotecii clasice libjpeg , conceput pentru a oferi cele mai rapide viteze de codare și decodare. Pe lângă API-ul standard libjpeg, biblioteca oferă propriul API TurboJPEG și o serie de extensii cu modele de randare a culorilor care permit comprimarea sau decodificarea imaginilor în buffere de pixeli pe 32 de biți (RGBX, XBGR).
Pe alte arhitecturi, accelerația nu este la fel de semnificativă, dar datorită utilizării funcțiilor de codare Huffman optimizate, biblioteca este încă vizibil mai rapidă decât libjpeg și se apropie de codecurile JPEG proprietare de înaltă calitate în ceea ce privește performanța.
Merită menționat faptul că ibjpeg-turbo a primit recent noua sa ramură 3.0 , iar principalele inovații evidențiate în această nouă versiune sunt următoarele:
- S-a adăugat suport pentru subeșantionarea culorilor 4:1:1, permițându-vă să convertiți, decupați și rotiți imagini JPEG subeșantionate 4:1:1 fără pierderi de calitate, precum și să le decomprimați și să le convertiți la modelul de culoare YUV.
- Calculul accelerat semnificativ al tabelelor Huffman optime. Pentru imaginile mici (256×256), modificarea a permis reducerea timpului de compresie de până la două ori.
- S-a adăugat capacitatea de a aplica codificare aritmetică a entropiei pentru imagini JPEG cu reprezentare de culoare pe 12 biți pe canal.
- API-ul TurboJPEG a fost reproiectat semnificativ pentru a elimina limitările existente și pentru a crește extensibilitatea. De exemplu, toate funcțiile C sunt acum prefixate cu „tj3”.
- Multe steaguri și moduri au fost convertite din argumente de funcție în parametri API generali.
- Suport pentru imagini cu 12 și 16 biți de culoare pe canal în modurile cu pierderi și fără pierderi.
- A fost adăugat modul de fișier JPEG fără pierderi, care este disponibil pentru imagini cu 8, 12 și 16 biți de culoare pe canal. S-a adăugat o nouă funcție jpeg_enable_lossless() și opțiunea de linie de comandă „-lossless”.
- S-au eliminat câmpurile, constructorii și metodele depreciate din API-ul Java TurboJPEG.
În cele din urmă, trebuie menționat că, în viitor, autorul libjpeg-turbo intenționează să limiteze munca la proiect la lansarea doar de actualizări cu remedieri de erori. Dezvoltarea noii versiuni 3.1 nu va începe până la obținerea finanțării pentru proiect.
Pentru cei interesați de cod , acesta este distribuit sub trei licențe similare BSD: IJG, modificată de BSD, și zlib. Fișierele binare sunt disponibile pentru Linux, macOS și Windows. Puteți găsi mai multe detalii și descărca fișierele binare de la următorul link.