libjpeg-turbo, et codec til kodning og afkodning af JPEG-billeder

libjpeg-turbo

libjpeg-turbo var oprindeligt baseret på libjpeg/SIMD, en MMX-accelereret afledning af libjpeg v6b

I Linux, når det kommer til codecs, bekymrer de fleste brugere sig normalt ikke om det, da dette problem i mange distributioner normalt allerede er løst ved at være inkluderet i målet som standard, ud over at se eller redigere applikationer, bidrager de også med deres korn af sand inklusive nogle ekstraudstyr.

Men hvad sker der, når en bruger ønsker at forbedre ydeevnen i visse aspekter, f.eks. til redigeringsopgaver eller til en simpel fritid. I denne del er ikke alle brugere involveret, men for dem, der er interesserede, har de en tendens til at undersøge fordele og ulemper, som hvert format byder på.

Og det er her, det codec, som vi skal tale om i dag, kommer ind, og det er, at JPEG-billedformatet som sådan er et af de mest populære, men det betyder ikke, at det er det bedste, da der er andre formater, der giver mange fordele i forhold til dette.

libjpeg-turbo er en løsning på nogle af manglerne ved JPEG sammenlignet med andre formater, som nævnt i dens GitHub-repository:

libjpeg-turbo er et JPEG-billedcodec, der bruger SIMD-instruktioner til at accelerere benchmark-JPEG-komprimering og -dekomprimering på x86-, x86-64-, Arm-, PowerPC- og MIPS-systemer samt progressiv JPEG-komprimering på x86, x86-64 og arm . På sådanne systemer er libjpeg-turbo generelt 2-6 gange hurtigere end libjpeg, alt andet lige. På andre typer systemer kan libjpeg-turbo stadig udkonkurrere libjpeg betydeligt i kraft af dets meget optimerede Huffman-kodningsrutiner. I mange tilfælde kan libjpeg-turbos ydeevne konkurrere med proprietære JPEG-codecs med høj hastighed.

libjpeg-turbo implementerer både den traditionelle libjpeg API og den mindre kraftfulde, men enklere TurboJPEG API. libjpeg-turbo har også farverumsudvidelser, der gør det muligt at komprimere/dekomprimere til 32-bit og big-endian pixelbuffere (RGBX, XBGR, osv.), samt en komplet Java-grænseflade.

Libjpeg-turbo er en API/ABI-kompatibel forgrening af det klassiske libjpeg-bibliotek , designet til at give de hurtigste kodnings- og afkodningshastigheder. Ud over standard libjpeg API'en tilbyder biblioteket sin egen TurboJPEG API og en række udvidelser med farvegengivelsesmodeller, der tillader komprimering eller afkodning af billeder til 32-bit pixelbuffere (RGBX, XBGR).

På andre arkitekturer er accelerationen ikke så betydelig, men på grund af brugen af ​​optimerede Huffman-kodningsfunktioner er biblioteket stadig mærkbart hurtigere end libjpeg og nærmer sig proprietære JPEG-codecs af høj kvalitet med hensyn til ydeevne.

Det er værd at nævne, at ibjpeg-turbo for nylig har modtaget sin nye 3.0-gren , og de vigtigste innovationer, der er fremhævet i denne nye version, er følgende:

  • Tilføjet understøttelse af 4:1:1 farvesubsampling, sÃ¥ du kan konvertere, beskære og rotere 4:1:1 subsamplede JPEG-billeder uden kvalitetstab, samt dekomprimere og konvertere dem til YUV-farvemodellen.
  • Væsentlig accelereret beregning af optimale Huffman-tabeller. For smÃ¥ billeder (256×256) tillod ændringen, at kompressionstiden blev reduceret med op til to gange.
  • Tilføjet muligheden for at anvende aritmetisk entropikodning til JPEG-billeder med 12-bit-per-kanal farverepræsentation.
  • TurboJPEG API er blevet væsentligt omdesignet for at fjerne eksisterende begrænsninger og øge udvidelsesmulighederne. For eksempel er alle C-funktioner nu præfikset med "tj3".
  • Mange flag og tilstande er blevet konverteret fra funktionsargumenter til generelle API-parametre.
  • Understøttelse af billeder med 12 og 16 bits farve pr. kanal i tabs- og tabsfri tilstande.
  • Tabsfri JPEG-filtilstand er blevet tilføjet, som er tilgængelig for billeder med 8, 12 og 16 bits farve pr. kanal. Tilføjet ny funktion jpeg_enable_lossless() og kommandolinjeindstillingen "-lossless".
  • Fjernede forældede felter, konstruktører og metoder i Java TurboJPEG API.

Til sidst skal det nævnes, at forfatteren af ​​libjpeg-turbo i fremtiden har til hensigt at begrænse arbejdet med projektet til kun at frigive opdateringer med fejlrettelser. Udviklingen af ​​den nye version 3.1 påbegyndes først, når finansieringen til projektet er opnået.

For dem der er interesserede i koden , er den distribueret under tre BSD-lignende licenser: IJG, modificeret af BSD, og ​​zlib. Binære filer er tilgængelige til Linux, macOS og Windows. Du kan finde flere detaljer og downloade de binære filer fra følgende link.


Tilføj som foretrukken kilde i Google