16 Punkte von lifthrasiir 2022-09-14 | 3 Kommentare | Auf WhatsApp teilen

JPEG XL ist ein Bilddateiformat der nächsten Generation, standardisiert als ISO/IEC 18181. Es war auch schon einmal bei GeekNews zu sehen. https://de.news.hada.io/topic?id=3788

In letzter Zeit scheint die Unterstützung in praktisch allen bildbezogenen Tools ergänzt zu werden, nur Browser ausgenommen. Dabei wird oft einfach die Referenzimplementierung libjxl verwendet, weil deren Qualität hoch ist. Allerdings ist libjxl selbst eine ziemlich große Software mit mehreren hunderttausend Zeilen C++, sodass der Build nicht gerade einfach ist. Außerdem wurde erst libjxl entwickelt und danach die Spezifikation erstellt, weshalb es etliche Stellen gibt, an denen Spezifikation und libjxl nicht übereinstimmen (und zwar sogar noch nach der Standardisierung ...). Hinzu kommt: Einen JPEG-XL-Encoder zu bauen ist vergleichsweise einfach, weil dafür auch die Unterstützung nur eines Teils der Funktionen ausreicht. Ein Decoder hingegen muss alle Funktionen unterstützen, weshalb es lange Zeit neben libjxl überhaupt keinen Decoder gab, der auch nur ein einziges Pixel decodieren konnte.

J40 ist ein Projekt, das diese Situation aufbrechen sollte und das ich nach meinem Ausscheiden aus dem Beruf auch als eine Art Reha begonnen habe; am Ende hat es ganze vier Monate gedauert ... Der aktuelle Stand von J40 ist (um Jon Sneyers zu zitieren), dass etwa 80 % der gesamten Spezifikation in C99 implementiert sind. Hätte ich gewusst, dass es so groß wird, hätte ich es von Anfang an lieber in Rust geschrieben. Wie auch immer: Ich hoffe, dieses Projekt ist für alle hilfreich, die sich für JPEG XL interessieren.

3 Kommentare

 
qwerty 2022-09-17

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

Ich glaube, dieser Teil sollte auf negative Werte geprüft werden~~

Auch in der Funktion j40__ans_table sollte sizeof(int16_t) * (size_t) table_size in einer Variablen gespeichert und vor dem Zugriff auf das D-Array geprüft werden.

Insbesondere in case 2 scheint es notwendig zu sein, die Bedingung 0 <= bias_size <= alpha_size <= table_size <= sizeof(int16_t) * (size_t) table_size mit J40__SHOULD zu prüfen.

Ich habe mir das großartige Projekt gerne angesehen~

 
lifthrasiir 2022-09-19

Habt ihr den Fuzzer vielleicht schon laufen lassen? Haha, da die API erst vergleichsweise spät festgelegt wurde, hat sich auch das Fuzzing verzögert, sodass wir es erst jetzt laufen lassen; wahrscheinlich wird es an einigen vorhersehbaren Stellen ordentlich krachen ... Zur Info: Das wurde im Fuzzing-Prozess bestätigt, und wir werden dazu in Kürze einen Fix hochladen.

 
xguru 2022-09-14

Wow, großartig. Ich unterstütze Ihre Arbeit immer!!