libjpeg-turbo, kodek do kodowania i dekodowania obrazów JPEG

libjpeg-turbo

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 niedociągnięć JPEG w stosunku do innych formatów, ponieważ jak wspomniano w ich 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 jest zgodnym z API/ABI rozwidleniem klasycznej biblioteki libjpeg, którego celem jest zapewnienie najszybszej prędkości kodowania i dekodowania. Oprócz standardowego interfejsu API libjpeg, biblioteka zapewnia własny interfejs API TurboJPEG oraz szereg rozszerzeń z modelami renderowania kolorów, które umożliwiają kompresję obrazów lub dekodowanie ich z 32-bitowych buforów pikseli (RGBX, XBGR).

Na innych architekturach przyspieszenie nie jest tak znaczące, ale dzięki zastosowaniu zoptymalizowanych funkcji kodowania Huffmana biblioteka nadal jest zauważalnie szybsza niż libjpeg i pod względem wydajności jest zbliżony do wysokiej jakości zastrzeżonych kodeków JPEG.

Warto o tym wspomnieć niedawnoibjpeg-turbo otrzymał nową gałąź 3.0 i główne innowacje, które wyróżniać się z tej nowej wersji, wymienione są:

  • 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 zainteresowany kodem Powinieneś wiedzieć, że jest dystrybuowany na trzech licencjach typu BSD IJG, modyfikowany przez BSD i zlib, a przygotowane binaria są oferowane dla systemów Linux, macOS i Windows. Możesz sprawdzić szczegóły, a także pobrać pliki binarne poniższy link.


Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.