16 pontos por lifthrasiir 2022-09-14 | 3 comentários | Compartilhar no WhatsApp

JPEG XL é um formato de arquivo de imagem de próxima geração padronizado como ISO/IEC 18181. Já apareceu uma vez no GeekNews também. https://pt.news.hada.io/topic?id=3788

Ultimamente, parece que o suporte está sendo adicionado a todas as ferramentas relacionadas a imagens, exceto os navegadores, e como a implementação de referência, libjxl, tem alta qualidade, em muitos casos ela é usada diretamente. No entanto, o próprio libjxl é um software bastante grande, com centenas de milhares de linhas em C++, então a compilação não é simples; além disso, como o libjxl foi criado antes da especificação, há vários pontos em que a especificação e o libjxl não batem (e isso mesmo depois da padronização...). Além disso, criar um codificador JPEG XL é relativamente fácil porque basta suportar apenas parte dos recursos, mas um decodificador precisa suportar todos os recursos, então por um bom tempo simplesmente não existia nenhum decodificador além do libjxl que sequer decodificasse um único pixel.

O J40 é um projeto que comecei para tentar superar essa situação + como uma espécie de reabilitação depois da aposentadoria, e acabou levando longos 4 meses... O J40 atual implementa em C99 cerca de 80% da especificação completa (para usar a expressão do Jon Sneyers), mas se eu soubesse que ia ficar tão grande, teria escrito em Rust desde o começo, aff. Enfim, espero que este projeto possa ser útil para quem tem interesse em JPEG XL.

3 comentários

 
qwerty 2022-09-17

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

Acho que precisa verificar valor negativo nesta parte~~

Na função j40__ans_table, também parece que seria bom armazenar sizeof(int16_t) * (size_t) table_size em uma variável e verificar antes de acessar o array D.

Especialmente no case 2, parece necessário usar J40__SHOULD para a condição 0 <= bias_size <= alpha_size <= table_size <= sizeof(int16_t) * (size_t) table_size.

Gostei muito do projeto~

 
lifthrasiir 2022-09-19

Vocês chegaram a rodar um fuzzer? kkkk Como a API foi definida relativamente mais tarde, demoramos para rodar o fuzzer e só agora estamos fazendo isso, então provavelmente vai quebrar bastante em pontos previsíveis... Só para constar, isso foi identificado durante o processo de fuzzing e em breve vamos enviar uma correção.

 
xguru 2022-09-14

Uau, que incrível. Estou sempre torcendo pelo seu trabalho!!