libjpeg-turbo, JPEG görüntülerin kodlanması ve kodunun çözülmesi için bir codec bileşeni

libjpeg turbo

libjpeg-turbo başlangıçta libjpeg v6b'nin MMX hızlandırmalı bir türevi olan libjpeg/SIMD'ye dayanıyordu.

Linux'ta, codec'ler söz konusu olduğunda, çoğu kullanıcı genellikle bu konuda endişelenmez, çünkü birçok dağıtımda bu sorun genellikle varsayılan olarak hedefe dahil edilerek çözülür, uygulamaları görüntülemeye veya düzenlemeye ek olarak, Ayrıca tahıllarına da katkıda bulunurlar. bazı ekstralar dahil olmak üzere kum.

Ancak bir kullanıcı, örneğin düzenleme görevleri veya basit eğlence için belirli yönlerde performansı artırmak istediğinde ne olur? Bu bölümde, tüm kullanıcılar yer almıyor, ancak ilgilenenler için her formatın sunduğu avantaj ve dezavantajları araştırmaya yöneliyorlar.

Ve bugün bahsedeceğimiz codec'in devreye girdiği yer burasıdır ve bu, JPEG resim formatının en popüler formatlardan biri olduğudur, ancak bu onun en iyisi olduğu anlamına gelmez, çünkü başka formatlar da vardır. buna göre birçok avantaj sunuyor.

libjpeg-turbo , GitHub deposunda da belirtildiği gibi, JPEG'in diğer formatlara kıyasla bazı eksikliklerine bir çözümdür :

libjpeg-turbo, x86, x86-64, Arm, PowerPC ve MIPS sistemlerinde karşılaştırmalı JPEG sıkıştırma ve sıkıştırmayı açmanın yanı sıra x86, x86-64 ve arm üzerinde aşamalı JPEG sıkıştırmayı hızlandırmak için SIMD yönergelerini kullanan bir JPEG görüntü codec bileşenidir. Bu tür sistemlerde, libjpeg-turbo genellikle libjpeg'den 2-6 kat daha hızlıdır, diğer her şey eşittir. Diğer sistem türlerinde libjpeg-turbo, yüksek düzeyde optimize edilmiş Huffman kodlama yordamları sayesinde libjpeg'den önemli ölçüde daha iyi performans gösterebilir. Birçok durumda, libjpeg-turbo'nun performansı tescilli yüksek hızlı JPEG codec'lerinin performansına rakip olur.

libjpeg-turbo, hem geleneksel libjpeg API'sini hem de daha az güçlü ancak daha basit TurboJPEG API'sini uygular. libjpeg-turbo ayrıca 32-bit ve big-endian piksel arabelleklerine (RGBX, XBGR, vb.) sıkıştırmasına/açmasına izin veren renk alanı uzantılarının yanı sıra tam özellikli bir Java arabirimine de sahiptir.

Libjpeg-turbo, en hızlı kodlama ve kod çözme hızlarını sağlamak üzere tasarlanmış, klasik libjpeg kütüphanesinin API/ABI uyumlu bir çatalıdır . Standart libjpeg API'sine ek olarak, kütüphane kendi TurboJPEG API'sini ve görüntülerin 32 bit piksel arabelleklerine (RGBX, XBGR) sıkıştırılmasına veya kod çözülmesine olanak tanıyan bir dizi renk işleme modeli içeren uzantılar sunar.

Diğer mimarilerde hızlanma o kadar belirgin olmasa da, optimize edilmiş Huffman kodlama fonksiyonlarının kullanımı sayesinde kütüphane, libjpeg'den gözle görülür şekilde daha hızlıdır ve yüksek kaliteli tescilli JPEG kodeklerinin performansına yaklaşmaktadır.

Şunu da belirtmekte fayda var ki, ibjpeg-turbo yakın zamanda 3.0 sürümünü aldı ve bu yeni sürümde öne çıkan başlıca yenilikler şunlardır:

  • 4:1:1 renk alt örnekleme desteği eklendi, 4:1:1 alt örneklenmiş JPEG görüntülerini kalite kaybı olmadan dönüştürmenize, kırpmanıza ve döndürmenize, aynı zamanda bunları açıp YUV renk modeline dönüştürmenize olanak tanıyor.
  • Optimal Huffman tablolarının önemli ölçüde hızlandırılmış hesaplaması. Küçük resimler (256×256) için, değişiklik sıkıştırma süresinin iki kata kadar azaltılmasına izin verdi.
  • Kanal başına 12 bit renk gösterimi ile JPEG görüntüler için aritmetik entropi kodlaması uygulama yeteneği eklendi.
  • TurboJPEG API, mevcut sınırlamaları kaldırmak ve genişletilebilirliği artırmak için önemli ölçüde yeniden tasarlandı. Örneğin, tüm C işlevlerinin önüne artık "tj3" eki eklenmiştir.
  • Birçok bayrak ve mod, işlev bağımsız değişkenlerinden genel API parametrelerine dönüştürülmüştür.
  • Kayıplı ve kayıpsız modlarda kanal başına 12 ve 16 bit renkli görüntüler için destek.
  • Kanal başına 8, 12 ve 16 bit renkli görüntüler için kullanılabilen kayıpsız JPEG dosya modu eklendi. Yeni jpeg_enable_lossless() işlevi ve "-lossless" komut satırı seçeneği eklendi.
  • Java TurboJPEG API'sinde kullanımdan kaldırılan alanlar, oluşturucular ve yöntemler kaldırıldı.

Son olarak, libjpeg-turbo'nun yazarının gelecekte proje üzerindeki çalışmayı yalnızca hata düzeltmeleri içeren güncellemeler yayınlamakla sınırlamayı planladığı belirtilmelidir. Yeni sürüm 3.1'in geliştirilmesi, proje için finansman sağlanana kadar başlamayacaktır.

Kodla ilgilenenler için , kod üç BSD benzeri lisans altında dağıtılmaktadır: IJG, BSD tarafından değiştirilmiş lisans ve zlib. İkili dosyalar Linux, macOS ve Windows için mevcuttur. Daha fazla ayrıntıya ulaşabilir ve ikili dosyaları aşağıdaki bağlantıdan indirebilirsiniz.


Google'da tercih edilen kaynak olarak ekleyin.