J40: Dekoder JPEG XL
(github.com/lifthrasiir)JPEG XL adalah format berkas gambar generasi berikutnya yang distandardisasi sebagai ISO/IEC 18181. Sepertinya ini juga pernah muncul sekali di GeekNews. https://id.news.hada.io/topic?id=3788
Belakangan ini, tampaknya dukungan sedang ditambahkan ke hampir semua alat yang terkait dengan gambar kecuali browser, dan karena implementasi referensi libjxl berkualitas tinggi, banyak kasus langsung menggunakannya apa adanya. Namun, libjxl sendiri adalah perangkat lunak yang cukup besar dengan ratusan ribu baris kode dalam C++, sehingga build-nya tidak sederhana, dan karena libjxl dibuat lebih dulu sebelum spesifikasinya disusun, ada cukup banyak bagian di mana spesifikasi dan libjxl tidak cocok (bahkan setelah distandardisasi pun masih seperti ini...). Selain itu, membuat encoder JPEG XL relatif mudah karena cukup mendukung sebagian fungsi saja, tetapi decoder harus mendukung semua fungsi, sehingga untuk waktu yang cukup lama bahkan tidak ada decoder lain selain libjxl yang bisa mendekodekan satu piksel pun.
J40 adalah proyek yang saya mulai untuk mencoba mengatasi situasi itu sekaligus sebagai semacam rehabilitasi setelah pensiun, dan ternyata butuh waktu sampai 4 bulan penuh... Saat ini J40 (meminjam ungkapan dari Jon Sneyers) telah mengimplementasikan sekitar 80% dari keseluruhan spesifikasi dalam C99, dan kalau tahu akan sebesar ini saya seharusnya menulisnya dengan Rust sejak awal. Bagaimanapun, saya berharap proyek ini bisa membantu siapa pun yang tertarik pada JPEG XL.
3 komentar
https://github.com/lifthrasiir/j40/…
Sepertinya bagian ini perlu pengecekan nilai negatif~~
Di fungsi
j40__ans_tablejuga sepertinya perlu menyimpansizeof(int16_t) * (size_t) table_sizeke variabel lalu melakukan pengecekan sebelum mengakses arrayD.Terutama pada case 2, sepertinya perlu memakai
J40__SHOULDuntuk kondisi0 <= bias_size <= alpha_size <= table_size <= sizeof(int16_t) * (size_t) table_size.Saya sangat menikmati melihat proyek yang keren ini~
Apakah Anda sempat menjalankan fuzzer? wkwkwk Karena API-nya diputuskan relatif belakangan, kami jadi terlambat menjalankan fuzzer dan baru sekarang melakukannya, jadi kemungkinan besar akan banyak yang bermasalah di titik-titik yang bisa diprediksi... Sebagai informasi, hal ini sudah terkonfirmasi dalam proses fuzzing dan kami berencana segera mengunggah perbaikannya.
Wah, keren sekali. Saya selalu mendukung pekerjaan yang Anda lakukan!!