16 điểm bởi lifthrasiir 2022-09-14 | 3 bình luận | Chia sẻ qua WhatsApp

JPEG XL là định dạng tệp hình ảnh thế hệ mới được tiêu chuẩn hóa thành ISO/IEC 18181. Hình như trước đây cũng từng được đăng một lần trên GeekNews. https://vi.news.hada.io/topic?id=3788

Dạo này có vẻ mọi công cụ liên quan đến hình ảnh đều đang được bổ sung hỗ trợ, trừ trình duyệt; và vì bản triển khai tham chiếu libjxl có chất lượng cao nên nhiều nơi cứ dùng nguyên bản đó. Nhưng bản thân libjxl là một phần mềm khá lớn với hàng trăm nghìn dòng C++, nên việc build không hề đơn giản; hơn nữa libjxl được tạo ra trước rồi đặc tả mới xuất hiện, nên cũng có khá nhiều chỗ đặc tả và libjxl không khớp nhau (thậm chí sau cả khi đã được tiêu chuẩn hóa thì vẫn như vậy...). Ngoài ra, việc tạo một bộ mã hóa JPEG XL thì tương đối dễ vì chỉ cần hỗ trợ một phần tính năng, nhưng bộ giải mã thì phải hỗ trợ toàn bộ tính năng, nên trong một thời gian dài ngoài libjxl ra thậm chí còn không có nổi một trình giải mã nào giải được dù chỉ một pixel.

J40 là dự án tôi bắt đầu để thử phá vỡ tình trạng đó, đồng thời cũng như một phần phục hồi sau khi nghỉ việc, và ròng rã mất tới 4 tháng... Hiện tại J40 (mượn cách diễn đạt của Jon Sneyers) đã triển khai khoảng 80% toàn bộ đặc tả bằng C99; nếu biết nó sẽ phình to thế này thì ngay từ đầu tôi đã viết bằng Rust cho rồi. Dù sao thì tôi vẫn hy vọng dự án này sẽ hữu ích cho những ai quan tâm đến JPEG XL.

3 bình luận

 
qwerty 2022-09-17

https://github.com/lifthrasiir/j40/…

Có vẻ phần này cần kiểm tra giá trị âm~~

Trong hàm j40__ans_table cũng có lẽ nên lưu sizeof(int16_t) * (size_t) table_size vào một biến và kiểm tra trước khi truy cập mảng D.

Đặc biệt ở case 2, có vẻ cần dùng J40__SHOULD cho điều kiện 0 <= bias_size <= alpha_size <= table_size <= sizeof(int16_t) * (size_t) table_size.

Tôi đã xem dự án rất thú vị~

 
lifthrasiir 2022-09-19

Bạn đã chạy fuzzer chưa? haha. Vì API được quyết định tương đối muộn nên việc chạy fuzzer cũng bị chậm, giờ mới bắt đầu chạy thì chắc là sẽ vỡ khá nhiều ở những chỗ có thể đoán trước được... Tham khảo thêm là nội dung này đã được xác nhận trong quá trình fuzzing và tôi dự định sẽ sớm đưa bản sửa lên.

 
xguru 2022-09-14

Wow, thật tuyệt vời. Tôi luôn ủng hộ những gì bạn đang làm!!