libjpeg-turbo, i-codec yombhalo wekhodi nokuqopha izithombe ze-JPEG

libjpeg-turbo

I-libjpeg-turbo ekuqaleni ibisekelwe ku-libjpeg/SIMD , okuphuma kokusheshisiwe kwe-MMX kwe-libjpeg v6b

Ku-Linux, uma kukhulunywa ngama-codec, abasebenzisi abaningi abavamisile ukukhathazeka ngakho, ngoba ekusabalazweni okuningi le nkinga ivame ukuxazululwa ngokufakwa kokuhlosiwe ngokuzenzakalelayo, ngaphezu kokubuka noma ukuhlela izinhlelo zokusebenza, Baphinde banikele ngokusanhlamvu kwabo. yesihlabathi kuhlanganise nokunye okungeziwe.

Kodwa kwenzekani uma umsebenzisi efuna ukuthuthukisa ukusebenza ezicini ezithile, ake sithi ukuhlela imisebenzi noma ukuzilibazisa okulula. Kule ngxenye, akubona bonke abasebenzisi ababandakanyekayo, kodwa kulabo abanentshisekelo, bavame ukuphenya izinzuzo nezingozi ezinikezwa yifomethi ngayinye.

Futhi kulapho i-codec esizokhuluma ngayo namuhla ingena futhi lokho kungukuthi ifomethi yesithombe se-JPEG ingenye ethandwa kakhulu, kodwa lokhu akusho ukuthi iyona engcono kakhulu, njengoba kukhona amanye amafomethi nikeza izinzuzo eziningi ngaphezu kwalokhu.

I-libjpeg-turbo iyisisombululo kwezinye zeziphambeko ze-JPEG uma kuqhathaniswa nezinye izinhlobo, njengoba kushiwo endaweni yayo yokugcina ye-GitHub:

I-libjpeg-turbo iyikhodekhi yesithombe ye-JPEG esebenzisa iziqondiso ze-SIMD ukusheshisa ukuminyanisa kwebhentshimark ye-JPEG kanye nokuwohloka ezinhlelweni ze-x86, x86-64, Arm, PowerPC, ne-MIPS, kanye nokuminyaniswa kwe-JPEG okuqhubekayo ku-x86, x86-64, nengalo . Kulezo zinhlelo, i-libjpeg-turbo ivamise ukushesha izikhathi ezi-2-6 kune-libjpeg, konke okunye kuyalingana. Kwezinye izinhlobo zezinhlelo, i-libjpeg-turbo isengadlula i-libjpeg ngenani elibalulekile, ngenxa yezinqubo zayo zokubhala amakhodi ze-Huffman ezithuthukiswe kakhulu. Ezimweni eziningi, ukusebenza kwe-libjpeg-turbo kuncintisana naleyo yamakhodekhi e-JPEG esivinini esikhulu.

I-libjpeg-turbo isebenzisa kokubili i-libjpeg API yendabuko kanye ne-TurboJPEG API enamandla kancane kodwa elula. i-libjpeg-turbo futhi ifaka izandiso zesikhala sombala ezisivumela ukuthi iminyanise/incindezeke ibe ngamabhafa amaphikseli angu-32-bit nama-big-endian (RGBX, XBGR, njll.), kanye nesixhumi esibonakalayo se-Java esinesici esigcwele.

I-Libjpeg-turbo iyifoloko ehambisana ne-API/ABI yomtapo wolwazi we-libjpeg wakudala , eyenzelwe ukuhlinzeka ngesivinini esisheshayo sokufaka ikhodi nokubhala ikhodi. Ngaphezu kwe-libjpeg API ejwayelekile, umtapo wolwazi uhlinzeka nge-TurboJPEG API yawo kanye nenani lezandiso ezinamamodeli okunikeza imibala avumela izithombe ukuthi zicindezelwe zibe ama-buffer e-pixel angu-32-bit (RGBX, XBGR) noma zibhalwe ikhodi.

Kwezinye izakhiwo, ukusheshisa akubalulekile kangako, kodwa ngenxa yokusetshenziswa kwemisebenzi yokubhala ikhodi ye-Huffman elungiselelwe kahle, umtapo wolwazi usashesha kakhulu kune-libjpeg futhi usondela kuma-codec e-JPEG asezingeni eliphezulu ngokusebenza.

Kuhle ukusho ukuthi i-ibjpeg-turbo isanda kuthola igatsha layo elisha le-3.0 , futhi izinto ezintsha ezivelele kule nguqulo entsha yilezi ezilandelayo:

  • Ukwengezwa okungeziwe kokusampula kombala okungu-4:1:1, okukuvumela ukuthi uguqule, unqampune, futhi ujikeleze 4:1:1 izithombe ze-JPEG zesampula ezingaphansi ngaphandle kokulahleka kwekhwalithi, kanye nokuwohloza futhi uziguqulele kumodeli yombala we-YUV.
  • Izibalo ezisheshiswe ngokuphawulekayo zamathebula e-Huffman alungile. Ezithombeni ezincane (256×256), uguquko luvumele isikhathi sokucindezelwa ukuthi sincishiswe ngokufika izikhathi ezimbili.
  • Kwengezwe amandla okufaka ikhodi ye-arithmetic entropy yezithombe ze-JPEG ezinokumelwa kombala ongu-12-bit-per-channel.
  • I-TurboJPEG API iklanywe kabusha ngokuphawulekayo ukususa imikhawulo ekhona futhi kwandiswe ukunwebeka. Isibonelo, yonke imisebenzi ye-C manje isifakwe kuqala ngokuthi "tj3".
  • Amafulegi amaningi namamodi ashintshiwe asuka ku-agumenti yokusebenza ayiswa kumapharamitha ajwayelekile we-API.
  • Ukusekelwa kwezithombe ezinamabhithi angu-12 no-16 ombala wesiteshi ngasinye ezimodini ezilahlekile nezingalahleki.
  • Imodi yefayela ye-JPEG engalahleki yengeziwe, etholakala ezithombeni ezinombala wamabhithi angu-8, 12, no-16 wesiteshi ngasinye. Kwengezwe umsebenzi omusha jpeg_enable_lossless() kanye nenketho yomugqa womyalo "-lossless".
  • Kukhishwe izinkambu ezihoxisiwe, abakhi, nezindlela ku-Java TurboJPEG API.

Okokugcina, kufanele kushiwo ukuthi ngokuzayo, umbhali we-libjpeg-turbo uhlose ukukhawulela umsebenzi kuphrojekthi ukuze akhiphe kuphela izibuyekezo ezinokulungiswa kweziphazamisi. Ukuthuthukiswa kwenguqulo entsha 3.1 ngeke kuqale kuze kutholakale uxhaso lwephrojekthi.

Kulabo abanentshisekelo kukhodi , isatshalaliswa ngaphansi kwamalayisense amathathu afana ne-BSD: i-IJG, eguquliwe yi-BSD, kanye ne-zlib. Ama-binary ayatholakala ku-Linux, macOS, kanye ne-Windows. Ungathola imininingwane eyengeziwe bese ulanda ama-binary kusixhumanisi esilandelayo.


Engeza njengomthombo okhethwayo ku-Google