libjpeg-turbo, koodekki JPEG-kuvien koodaamiseen ja purkamiseen

libjpeg-turbo

libjpeg-turbo perustui alun perin libjpeg/SIMD:hen, MMX-kiihdytettyyn libjpeg v6b:n johdannaiseen.

Linuxissa, mitä tulee koodekkeihin, useimmat käyttäjät eivät yleensä ole huolissaan siitä, koska monissa jakeluissa tämä ongelma on yleensä jo ratkaistu sisällyttämällä se oletusarvoisesti kohteeseen, sen lisäksi, että he voivat tarkastella tai muokata sovelluksia. hiekkaa sisältäen joitain lisävarusteita.

Mutta mitä tapahtuu, kun käyttäjä haluaa parantaa suorituskykyä tietyissä asioissa, esimerkiksi muokkaustehtäviä tai yksinkertaista vapaa-aikaa varten. Tässä osassa kaikki käyttäjät eivät osallistu, mutta kiinnostuneet he yleensä tutkivat kunkin muodon etuja ja haittoja.

Ja tässä tulee esiin se koodekki, josta aiomme puhua tänään, ja se on, että sellaisenaan JPEG-kuvamuoto on yksi suosituimmista, mutta tämä ei tarkoita, että se olisi paras, koska on muitakin muotoja, tarjoavat monia etuja tähän verrattuna.

libjpeg-turbo on ratkaisu joihinkin JPEG:n puutteisiin muihin formaatteihin verrattuna, kuten sen GitHub-arkistossa mainitaan:

libjpeg-turbo on JPEG-kuvapakkaus, joka käyttää SIMD-ohjeita nopeuttaakseen JPEG-pakkauksen ja -purkumisen vertailuarvoa x86-, x86-64-, Arm-, PowerPC- ja MIPS-järjestelmissä sekä progressiivista JPEG-pakkausta x86-, x86-64- ja arm-järjestelmissä. Tällaisissa järjestelmissä libjpeg-turbo on yleensä 2-6 kertaa nopeampi kuin libjpeg, kaiken muun ollessa sama. Muun tyyppisissä järjestelmissä libjpeg-turbo voi silti ylittää libjpegin huomattavasti sen erittäin optimoitujen Huffman-koodausrutiinien ansiosta. Monissa tapauksissa libjpeg-turbon suorituskyky kilpailee patentoitujen nopeiden JPEG-koodekkien kanssa.

libjpeg-turbo toteuttaa sekä perinteisen libjpeg API:n että vähemmän tehokkaan mutta yksinkertaisemman TurboJPEG API:n. libjpeg-turbo sisältää myös väriavaruuslaajennuksia, jotka mahdollistavat sen pakkaamisen/purkamisen 32-bittisiin ja suuriin pikselipuskureihin (RGBX, XBGR jne.), sekä täysin varustetun Java-käyttöliittymän.

Libjpeg-turbo on API/ABI-yhteensopiva haarauma klassisesta libjpeg-kirjastosta , joka on suunniteltu tarjoamaan nopeimmat koodaus- ja dekoodausnopeudet. Tavallisen libjpeg-rajapinnan lisäksi kirjasto tarjoaa oman TurboJPEG-rajapinnan ja useita värintoistomalleja sisältäviä laajennuksia, joiden avulla kuvia voidaan pakata 32-bittisiksi pikselipuskurimuodoiksi (RGBX, XBGR) tai dekoodata.

Muilla arkkitehtuureilla kiihtyvyys ei ole yhtä merkittävää, mutta optimoitujen Huffman-koodausfunktioiden ansiosta kirjasto on silti huomattavasti nopeampi kuin libjpeg ja lähestyy suorituskyvyn suhteen korkealaatuisia, patentoituja JPEG-koodekkeja.

On syytä mainita, että ibjpeg-turbo sai hiljattain uuden 3.0-haaran , ja tämän uuden version tärkeimmät innovaatiot ovat seuraavat:

  • Lisätty tuki 4:1:1 värin alinäytteenotolle, jonka avulla voit muuntaa, rajata ja kiertää 4:1:1 alinäytteen otettuja JPEG-kuvia ilman laadun heikkenemistä sekä purkaa ja muuntaa ne YUV-värimalliksi.
  • Huomattavasti nopeutettu optimaalisten Huffman-taulukoiden laskenta. Pienille kuville (256 × 256) muutos mahdollisti pakkausajan lyhentämisen jopa kaksinkertaiseksi.
  • Lisätty mahdollisuus käyttää aritmeettista entropiakoodausta JPEG-kuville 12-bittisellä kanavaa kohden väriesityksenä.
  • TurboJPEG-sovellusliittymää on suunniteltu merkittävästi uudelleen nykyisten rajoitusten poistamiseksi ja laajennettavuuden lisäämiseksi. Esimerkiksi kaikkien C-funktioiden etuliitteenä on nyt "tj3".
  • Monet liput ja tilat on muunnettu funktion argumenteista yleisiksi API-parametreiksi.
  • Tuki kuville, joissa on 12 ja 16 bittiä väriä kanavaa kohden häviöllisissä ja häviöttömässä tilassa.
  • Häviötön JPEG-tiedostotila on lisätty, joka on käytettävissä kuville, joissa on 8, 12 ja 16 bittiä väriä kanavaa kohti. Lisätty uusi funktio jpeg_enable_lossless() ja komentorivivaihtoehto "-lossless".
  • Poistettu vanhentuneet kentät, rakentajat ja menetelmät Java TurboJPEG API:sta.

Lopuksi on syytä mainita, että tulevaisuudessa libjpeg-turbon kirjoittaja aikoo rajoittaa projektin työskentelyn vain päivitysten julkaisemiseen virheenkorjauksilla. Uuden version 3.1 kehitystä ei aloiteta ennen kuin hankkeelle on saatu rahoitus.

Koodia tutkiville tiedoksi , että se on jaettu kolmen BSD:n kaltaisen lisenssin alaisuudessa: IJG, BSD:n muokkaama ja zlib. Binääritiedostot ovat saatavilla Linuxille, macOS:lle ja Windowsille. Lisätietoja ja binääritiedostojen lataus onnistuu seuraavasta linkistä.


Lisää ensisijaiseksi lähteeksi Googlessa