libjpeg-turbo התבסס במקור על libjpeg/SIMD , נגזרת מואצת של MMX של libjpeg v6b
בלינוקס, כשמדובר ב-codec, רוב המשתמשים לא נוהגים לדאוג לגבי זה, שכן בהפצות רבות בעיה זו בדרך כלל כבר נפתרת על ידי הכללה ביעד כברירת מחדל, בנוסף לצפייה או עריכה של יישומים, הם גם תורמים את התבואה שלהם של חול כולל כמה תוספות.
אבל מה קורה כאשר משתמש רוצה לשפר את הביצועים בהיבטים מסוימים, למשל עבור משימות עריכה או לפנאי פשוט. בחלק זה לא כל המשתמשים מתערבים, אבל למי שמתעניין, הם נוטים לחקור את היתרונות והחסרונות שמציע כל פורמט.
וכאן נכנס לתמונה ה-codec שעליו נדבר היום והוא שככזה פורמט התמונה JPEG הוא אחד הפופולריים ביותר, אבל זה לא אומר שהוא הטוב ביותר, שכן יש פורמטים אחרים מציעים יתרונות רבים על פני זה.
libjpeg-turbo הוא פתרון לחלק מהחסרונות של JPEG בהשוואה לפורמטים אחרים, כפי שצוין במאגר GitHub שלו:
libjpeg-turbo הוא Codec תמונה JPEG המשתמש בהוראות SIMD כדי להאיץ את דחיסת ה-JPEG ופירוק הדחיסה במערכות x86, x86-64, Arm, PowerPC ו-MIPS, כמו גם דחיסה מתקדמת של JPEG ב-x86, x86-64 ו-arm . במערכות כאלה, libjpeg-turbo הוא בדרך כלל מהיר פי 2-6 מ-libjpeg, כל השאר שווה. בסוגים אחרים של מערכות, libjpeg-turbo עדיין יכול לעלות על libjpeg בכמות משמעותית, בזכות שגרות הקידוד של האפמן הממוטבות מאוד. במקרים רבים, הביצועים של libjpeg-turbo מתחרים בביצועים של רכיבי Codec JPEG בעלי מהירות גבוהה.
libjpeg-turbo מיישמת הן את ה-API המסורתי של libjpeg והן את ה-API הפחות חזק אך הפשוט יותר של TurboJPEG. libjpeg-turbo כולל גם הרחבות מרחב צבע המאפשרות לו דחיסה/פירוק למאגרי פיקסלים של 32 סיביות ו-Big-endian (RGBX, XBGR וכו'), כמו גם ממשק Java עם תכונות מלאות.
Libjpeg-turbo הוא פורק תואם API/ABI של ספריית libjpeg הקלאסית , שנועד לספק את מהירויות הקידוד והפענוח המהירות ביותר. בנוסף ל-API הסטנדרטי של libjpeg, הספרייה מספקת API TurboJPEG משלה ומספר הרחבות עם מודלים של עיבוד צבע המאפשרים לדחוס תמונות למאגרי פיקסלים של 32 סיביות (RGBX, XBGR) או לפענח אותן.
בארכיטקטורות אחרות, התאוצה אינה משמעותית באותה מידה, אך הודות לשימוש בפונקציות קידוד Huffman אופטימליות, הספרייה עדיין מהירה באופן ניכר מ-libjpeg ומתקרבת לקודקים קנייניים של JPEG באיכות גבוהה מבחינת ביצועים.
ראוי לציין ש-ibjpeg-turbo קיבל לאחרונה את הענף החדש שלו בגרסה 3.0 , והחידושים העיקריים המודגשים בגרסה חדשה זו הם הבאים:
- נוספה תמיכה בתת דגימת צבע 4:1:1, המאפשרת לך להמיר, לחתוך ולסובב תמונות JPEG מדגימות משנה 4:1:1 ללא אובדן איכות, כמו גם לבטל את הדחיסה ולהמיר אותן לדגם הצבע YUV.
- חישוב מואץ משמעותית של טבלאות האפמן אופטימליות. עבור תמונות קטנות (256×256), השינוי אפשר את זמן הדחיסה להקטין עד פי שניים.
- נוספה את היכולת להחיל קידוד אנטרופיה אריתמטי עבור תמונות JPEG עם ייצוג צבע של 12 סיביות לערוץ.
- ה-API של TurboJPEG עוצב מחדש באופן משמעותי כדי להסיר מגבלות קיימות ולהגדיל את יכולת ההרחבה. לדוגמה, כל פונקציות C מקבלות כעת את הקידומת "tj3".
- דגלים ומצבים רבים הומרו מארגומנטים של פונקציה לפרמטרים כלליים של API.
- תמיכה בתמונות עם 12 ו-16 סיביות של צבע לכל ערוץ במצבי אובדן וללא אובדן.
- נוסף מצב קובץ JPEG ללא אובדן, הזמין עבור תמונות עם 8, 12 ו-16 סיביות של צבע לכל ערוץ. נוספה פונקציה חדשה jpeg_enable_lossless() ואפשרות שורת הפקודה "-lossless".
- הוסר שדות, בנאים ושיטות שהוצאו משימוש ב-Java TurboJPEG API.
לבסוף, יש להזכיר שבעתיד, הכותב של libjpeg-turbo מתכוון להגביל את העבודה על הפרויקט לשחרור עדכונים בלבד עם תיקוני באגים. פיתוח הגרסה החדשה 3.1 לא יחל עד לקבלת המימון לפרויקט.
למי שמעוניין בקוד , הוא מופץ תחת שלושה רישיונות דמויי BSD: IJG, שעבר שינוי על ידי BSD, ו-zlib. קבצים בינאריים זמינים עבור לינוקס, macOS ו-Windows. ניתן למצוא פרטים נוספים ולהוריד את הקבצים הבינאריים מהקישור הבא.