J40: JPEG XL डिकोडर
(github.com/lifthrasiir)JPEG XL, ISO/IEC 18181 के रूप में मानकीकृत अगली पीढ़ी का इमेज फ़ाइल फ़ॉर्मैट है। यह एक बार GeekNews पर भी आ चुका है। https://hi.news.hada.io/topic?id=3788
आजकल ब्राउज़र को छोड़कर लगभग सभी इमेज-संबंधित टूल्स में इसका सपोर्ट जुड़ता दिख रहा है, लेकिन रेफ़रेंस इम्प्लिमेंटेशन libjxl की क्वालिटी इतनी अच्छी है कि बहुत से लोग उसे वैसा का वैसा ही इस्तेमाल करते हैं। लेकिन libjxl खुद C++ में लिखी हुई, कई लाख लाइनों वाली काफ़ी बड़ी सॉफ़्टवेयर परियोजना है, इसलिए इसे बिल्ड करना आसान नहीं है। साथ ही, libjxl पहले बना और उसके बाद स्पेसिफ़िकेशन तैयार हुई, इसलिए स्पेसिफ़िकेशन और libjxl के बीच काफ़ी जगहों पर मेल नहीं बैठता (यहाँ तक कि मानकीकरण के बाद भी हाल ऐसा ही है...)। ऊपर से, JPEG XL एन्कोडर बनाना अपेक्षाकृत आसान है क्योंकि उसमें केवल कुछ फीचर्स का सपोर्ट भी चलेगा, लेकिन डिकोडर को सभी फीचर्स सपोर्ट करने होते हैं। इसी वजह से काफ़ी समय तक libjxl के अलावा ऐसा कोई डिकोडर ही नहीं था जो एक पिक्सेल भी डिकोड कर सके।
J40 ऐसा ही हाल बदलने की कोशिश के रूप में, और रिटायरमेंट के बाद पुनर्वास के काम के तौर पर शुरू किया गया प्रोजेक्ट था, और इसे पूरा होने में पूरे 4 महीने लग गए... अभी का J40 (Jon Sneyers के शब्द उधार लें तो) पूरी स्पेसिफ़िकेशन का लगभग 80% C99 में इम्प्लिमेंट कर चुका है। अब सोचता हूँ कि अगर पता होता यह इतना बड़ा हो जाएगा, तो शुरू से ही इसे Rust में लिखता, हाय। खैर, उम्मीद है कि यह प्रोजेक्ट JPEG XL में रुचि रखने वाले लोगों के लिए उपयोगी होगा।
3 टिप्पणियां
https://github.com/lifthrasiir/j40/…
मुझे लगता है यहाँ negative check करना चाहिए~~
j40__ans_tableफ़ंक्शन में भीsizeof(int16_t) * (size_t) table_sizeको एक variable में store करके, D array को access करने से पहले check करना चाहिए।खासकर case 2 में,
0 <= bias_size <= alpha_size <= table_size <= sizeof(int16_t) * (size_t) table_sizeशर्त के लिएJ40__SHOULDका इस्तेमाल करना ज़रूरी लगता है।बहुत बढ़िया project था, देखकर अच्छा लगा~
क्या आपने fuzzer चलाया था? haha API अपेक्षाकृत बाद में तय हुआ था, इसलिए fuzzer चलाने में देर हो गई, और अब जाकर चला रहा हूँ, तो शायद कई चीज़ें अनुमानित जगहों पर टूटेंगी... संदर्भ के लिए, यह बात fuzzing प्रक्रिया के दौरान पुष्टि हो गई है और मैं जल्द ही इसका fix अपलोड करने वाला हूँ।
वाह, कमाल है। आप जो काम कर रहे हैं, उसके लिए मैं हमेशा आपका समर्थन करता हूँ!!