libjpeg-turbo było pierwotnie oparte na libjpeg/SIMD , akcelerowanej MMX pochodnej libjpeg v6b
W Linuksie, jeśli chodzi o kodeki, większość użytkowników zwykle się tym nie przejmuje, ponieważ w wielu dystrybucjach ten problem jest zwykle już rozwiązany przez domyślne włączenie do celu, oprócz przeglądania lub edytowania aplikacji, wnoszą również swój wkład piasku wraz z dodatkami.
Ale co się dzieje, gdy użytkownik chce poprawić wydajność w pewnych aspektach, na przykład w przypadku zadań edycyjnych lub zwykłego wypoczynku. W tej części nie wszyscy użytkownicy są zaangażowani, ale ci, którzy są zainteresowani, mają tendencję do badania zalet i wad każdego formatu.
I tu właśnie pojawia się kodek, o którym dzisiaj będziemy mówić, a mianowicie format obrazu JPEG jest jednym z najpopularniejszych, ale to nie znaczy, że jest najlepszy, ponieważ istnieją inne formaty, które oferują wiele zalet w stosunku do tego.
libjpeg-turbo to rozwiązanie niektórych niedogodności formatu JPEG w porównaniu z innymi formatami, o których wspomniano w repozytorium GitHub:
libjpeg-turbo to kodek obrazu JPEG, który wykorzystuje instrukcje SIMD do przyspieszenia porównawczej kompresji i dekompresji JPEG w systemach x86, x86-64, Arm, PowerPC i MIPS, a także progresywnej kompresji JPEG w systemach x86, x86-64 i arm . W takich systemach libjpeg-turbo jest ogólnie 2-6 razy szybsze niż libjpeg, przy czym wszystkie inne są takie same. W innych typach systemów libjpeg-turbo może nadal znacznie przewyższać libjpeg dzięki wysoce zoptymalizowanym procedurom kodowania Huffmana. W wielu przypadkach wydajność libjpeg-turbo dorównuje wydajności zastrzeżonych, szybkich kodeków JPEG.
libjpeg-turbo implementuje zarówno tradycyjny interfejs API libjpeg, jak i mniej wydajny, ale prostszy interfejs API TurboJPEG. libjpeg-turbo zawiera również rozszerzenia przestrzeni kolorów, które umożliwiają kompresję/dekompresję do 32-bitowych i big-endian buforów pikseli (RGBX, XBGR itp.), a także w pełni funkcjonalny interfejs Java.
Libjpeg-turbo to zgodny z API/ABI fork klasycznej biblioteki libjpeg , zaprojektowany z myślą o zapewnieniu najwyższych prędkości kodowania i dekodowania. Oprócz standardowego API libjpeg, biblioteka oferuje własne API TurboJPEG oraz szereg rozszerzeń z modelami renderowania kolorów, które umożliwiają kompresję obrazów do 32-bitowych buforów pikseli (RGBX, XBGR) lub ich dekodowanie.
W przypadku innych architektur przyspieszenie nie jest tak znaczące, ale dzięki wykorzystaniu zoptymalizowanych funkcji kodowania Huffmana biblioteka jest nadal zauważalnie szybsza od libjpeg i pod względem wydajności dorównuje wysokiej jakości zastrzeżonym kodekom JPEG.
Warto wspomnieć, że ibjpeg-turbo niedawno otrzymało nową gałąź 3.0 , a główne innowacje podkreślone w tej nowej wersji to:
- Dodano obsługę podpróbkowania kolorów 4:1:1, umożliwiającą konwersję, kadrowanie i obracanie podpróbkowanych obrazów JPEG 4:1:1 bez utraty jakości, a także dekompresowanie i konwersję do modelu kolorów YUV.
- Znacznie przyspieszone obliczanie optymalnych tablic Huffmana. W przypadku małych obrazów (256×256) zmiana pozwoliła skrócić czas kompresji nawet dwukrotnie.
- Dodano możliwość stosowania arytmetycznego kodowania entropijnego dla obrazów JPEG z 12-bitową reprezentacją kolorów na kanał.
- Interfejs API TurboJPEG został znacznie przeprojektowany, aby usunąć istniejące ograniczenia i zwiększyć rozszerzalność. Na przykład wszystkie funkcje C są teraz poprzedzone przedrostkiem „tj3”.
- Wiele flag i trybów zostało przekonwertowanych z argumentów funkcji na ogólne parametry API.
- Obsługa obrazów o 12 i 16 bitach koloru na kanał w trybach stratnych i bezstratnych.
- Dodano tryb bezstratnego pliku JPEG, który jest dostępny dla obrazów o 8, 12 i 16 bitach koloru na kanał. Dodano nową funkcję jpeg_enable_lossless() i opcję wiersza poleceń „-lossless”.
- Usunięto przestarzałe pola, konstruktory i metody w API Java TurboJPEG.
Na koniec należy wspomnieć, że w przyszłości autor libjpeg-turbo zamierza ograniczyć prace nad projektem do wydawania jedynie aktualizacji z poprawkami błędów. Prace nad nową wersją 3.1 rozpoczną się dopiero po uzyskaniu finansowania projektu.
Dla zainteresowanych kodem , jest on dystrybuowany na trzech licencjach podobnych do BSD: IJG, zmodyfikowanej przez BSD, oraz zlib. Pliki binarne są dostępne dla systemów Linux, macOS i Windows. Więcej szczegółów i pliki binarne można znaleźć pod poniższym linkiem.