Το libjpeg-turbo βασίστηκε αρχικά στο libjpeg/SIMD , μια επιταχυνόμενη με MMX παράγωγο του libjpeg v6b
Στο Linux, όταν πρόκειται για κωδικοποιητές, οι περισσότεροι χρήστες συνήθως δεν ανησυχούν γι' αυτό, καθώς σε πολλές διανομές αυτό το ζήτημα συνήθως επιλύεται ήδη με το να συμπεριλαμβάνεται στον στόχο από προεπιλογή, εκτός από την προβολή ή την επεξεργασία εφαρμογών, συνεισφέρουν επίσης στο κόπο τους άμμου συμπεριλαμβανομένων κάποιων πρόσθετων.
Τι συμβαίνει όμως όταν ένας χρήστης θέλει να βελτιώσει την απόδοση σε ορισμένες πτυχές, ας πούμε για εργασίες επεξεργασίας ή για απλό ελεύθερο χρόνο. Σε αυτό το κομμάτι δεν εμπλέκονται όλοι οι χρήστες, αλλά για όσους ενδιαφέρονται, τείνουν να διερευνήσουν τα πλεονεκτήματα και τα μειονεκτήματα που προσφέρει κάθε μορφή.
Και εδώ έρχεται ο κωδικοποιητής για τον οποίο θα μιλήσουμε σήμερα και αυτό είναι ότι ως εκ τούτου η μορφή εικόνας JPEG είναι από τις πιο δημοφιλείς, αλλά αυτό δεν σημαίνει ότι είναι και η καλύτερη, καθώς υπάρχουν και άλλες μορφές που προσφέρουν πολλά πλεονεκτήματα σε αυτό.
Το libjpeg-turbo είναι μια λύση σε ορισμένες από τις αδυναμίες του JPEG σε σύγκριση με άλλες μορφές, όπως αναφέρεται στο αποθετήριο GitHub:
Το libjpeg-turbo είναι ένας κωδικοποιητής εικόνας JPEG που χρησιμοποιεί οδηγίες SIMD για να επιταχύνει τη συμπίεση και αποσυμπίεση JPEG συγκριτικής αξιολόγησης σε συστήματα x86, x86-64, Arm, PowerPC και MIPS, καθώς και προοδευτική συμπίεση JPEG σε x86, x86-64 και βραχίονα. Σε τέτοια συστήματα, το libjpeg-turbo είναι γενικά 2-6 φορές ταχύτερο από το libjpeg, όλα τα άλλα είναι ίσα. Σε άλλους τύπους συστημάτων, το libjpeg-turbo μπορεί ακόμα να ξεπεράσει κατά πολύ το libjpeg, χάρη στις εξαιρετικά βελτιστοποιημένες ρουτίνες κωδικοποίησης Huffman. Σε πολλές περιπτώσεις, η απόδοση του libjpeg-turbo ανταγωνίζεται εκείνη των ιδιόκτητων κωδικοποιητών JPEG υψηλής ταχύτητας.
Το libjpeg-turbo υλοποιεί τόσο το παραδοσιακό API libjpeg όσο και το λιγότερο ισχυρό αλλά απλούστερο TurboJPEG API. Το libjpeg-turbo διαθέτει επίσης επεκτάσεις χρωματικού χώρου που του επιτρέπουν να συμπιέζει/αποσυμπιέζει σε buffer 32-bit και μεγάλων εικονοστοιχείων (RGBX, XBGR, κ.λπ.), καθώς και μια διεπαφή Java με πλήρεις δυνατότητες.
Το Libjpeg-turbo είναι ένα fork της κλασικής βιβλιοθήκης libjpeg συμβατό με API/ABI , σχεδιασμένο να παρέχει τις ταχύτερες ταχύτητες κωδικοποίησης και αποκωδικοποίησης. Εκτός από το τυπικό API libjpeg, η βιβλιοθήκη παρέχει το δικό της API TurboJPEG και μια σειρά από επεκτάσεις με μοντέλα απόδοσης χρωμάτων που επιτρέπουν τη συμπίεση εικόνων σε buffers pixel 32-bit (RGBX, XBGR) ή την αποκωδικοποίησή τους.
Σε άλλες αρχιτεκτονικές, η επιτάχυνση δεν είναι τόσο σημαντική, αλλά λόγω της χρήσης βελτιστοποιημένων συναρτήσεων κωδικοποίησης Huffman, η βιβλιοθήκη εξακολουθεί να είναι αισθητά ταχύτερη από την libjpeg και προσεγγίζει υψηλής ποιότητας ιδιόκτητους κωδικοποιητές JPEG όσον αφορά την απόδοση.
Αξίζει να σημειωθεί ότι το ibjpeg-turbo έλαβε πρόσφατα τη νέα έκδοση 3.0 και οι κύριες καινοτομίες που επισημαίνονται σε αυτήν τη νέα έκδοση είναι οι εξής:
- Προστέθηκε υποστήριξη για υποδειγματοληψία χρωμάτων 4:1:1, που σας επιτρέπει να μετατρέπετε, να περικόβετε και να περιστρέφετε 4:1:1 υποδειγματοληψίες εικόνων JPEG χωρίς απώλεια ποιότητας, καθώς και να τις αποσυμπιέζετε και να τις μετατρέπετε στο χρωματικό μοντέλο YUV.
- Σημαντικά επιταχυνόμενος υπολογισμός των βέλτιστων πινάκων Huffman. Για μικρές εικόνες (256×256), η αλλαγή επέτρεψε τη μείωση του χρόνου συμπίεσης έως και δύο φορές.
- Προστέθηκε η δυνατότητα εφαρμογής κωδικοποίησης αριθμητικής εντροπίας για εικόνες JPEG με χρωματική αναπαράσταση 12 bit ανά κανάλι.
- Το TurboJPEG API έχει επανασχεδιαστεί σημαντικά για την άρση των υφιστάμενων περιορισμών και την αύξηση της επεκτασιμότητας. Για παράδειγμα, όλες οι συναρτήσεις C έχουν πλέον πρόθεμα "tj3".
- Πολλές σημαίες και λειτουργίες έχουν μετατραπεί από ορίσματα συνάρτησης σε γενικές παραμέτρους API.
- Υποστήριξη για εικόνες με 12 και 16 bit χρώματος ανά κανάλι σε λειτουργίες με απώλειες και χωρίς απώλειες.
- Έχει προστεθεί η λειτουργία αρχείου JPEG χωρίς απώλειες, η οποία είναι διαθέσιμη για εικόνες με 8, 12 και 16 bit χρώματος ανά κανάλι. Προστέθηκε η νέα συνάρτηση jpeg_enable_lossless() και η επιλογή γραμμής εντολών "-lossless".
- Καταργήθηκαν καταργημένα πεδία, κατασκευαστές και μέθοδοι στο Java TurboJPEG API.
Τέλος, πρέπει να αναφερθεί ότι στο μέλλον, ο συγγραφέας του libjpeg-turbo σκοπεύει να περιορίσει την εργασία στο έργο μόνο στην έκδοση ενημερώσεων με διορθώσεις σφαλμάτων. Η ανάπτυξη της νέας έκδοσης 3.1 δεν θα ξεκινήσει μέχρι να εξασφαλιστεί η χρηματοδότηση του έργου.
Για όσους ενδιαφέρονται για τον κώδικα , διανέμεται με τρεις άδειες χρήσης τύπου BSD: IJG, τροποποιημένη από BSD, και zlib. Τα δυαδικά αρχεία είναι διαθέσιμα για Linux, macOS και Windows. Μπορείτε να βρείτε περισσότερες λεπτομέρειες και να κατεβάσετε τα δυαδικά αρχεία από τον ακόλουθο σύνδεσμο.