libjpeg-turbo, um codec para codificar e decodificar imagens JPEG

libjpeg-turbo

libjpeg-turbo foi originalmente baseado em libjpeg/SIMD , um derivado acelerado por MMX de libjpeg v6b

No Linux, quando se trata de codecs, a maioria dos usuários não costuma se preocupar com isso, pois em muitas distribuições esse problema geralmente já está resolvido ao ser incluído no destino por padrão, além de visualizar ou editar aplicativos, eles também contribuem com seu grão de areia incluindo alguns extras.

Mas o que acontece quando um usuário deseja melhorar o desempenho em determinados aspectos, digamos para tarefas de edição ou para simples lazer. Nesta parte, nem todos os usuários se envolvem, mas para os interessados, eles tendem a investigar as vantagens e desvantagens que cada formato oferece.

E é aqui que entra o codec de que vamos falar hoje e é que, como tal, o formato de imagem JPEG é um dos mais populares, mas isso não significa que seja o melhor, pois existem outros formatos que oferecem muitas vantagens sobre isso.

libjpeg-turbo é uma solução para algumas das deficiências do JPEG em comparação com outros formatos, conforme mencionado em seu repositório no GitHub:

libjpeg-turbo é um codec de imagem JPEG que usa instruções SIMD para acelerar a compactação e descompactação JPEG de referência em sistemas x86, x86-64, Arm, PowerPC e MIPS, bem como compactação JPEG progressiva em x86, x86-64 e arm . Em tais sistemas, libjpeg-turbo é geralmente 2-6 vezes mais rápido que libjpeg, tudo o mais sendo igual. Em outros tipos de sistemas, libjpeg-turbo ainda pode superar libjpeg em uma quantidade significativa, em virtude de suas rotinas de codificação Huffman altamente otimizadas. Em muitos casos, o desempenho do libjpeg-turbo rivaliza com o dos codecs JPEG proprietários de alta velocidade.

libjpeg-turbo implementa tanto a API libjpeg tradicional quanto a API TurboJPEG menos poderosa, porém mais simples. O libjpeg-turbo também possui extensões de espaço de cores que permitem compactar/descompactar para buffers de pixel de 32 bits e big-endian (RGBX, XBGR, etc.), bem como uma interface Java completa.

Libjpeg-turbo é uma versão modificada (fork) da biblioteca clássica libjpeg , compatível com API/ABI, projetada para fornecer as velocidades de codificação e decodificação mais rápidas. Além da API padrão da libjpeg, a biblioteca oferece sua própria API TurboJPEG e diversas extensões com modelos de renderização de cores que permitem que as imagens sejam compactadas em buffers de pixels de 32 bits (RGBX, XBGR) ou decodificadas.

Em outras arquiteturas, a aceleração não é tão significativa, mas devido ao uso de funções de codificação Huffman otimizadas, a biblioteca ainda é visivelmente mais rápida que a libjpeg e se aproxima de codecs JPEG proprietários de alta qualidade em termos de desempenho.

Vale mencionar que o ibjpeg-turbo recebeu recentemente sua nova versão 3.0 , e as principais inovações destacadas nesta nova versão são as seguintes:

  • Adicionado suporte para subamostragem de cores 4:1:1, permitindo converter, recortar e girar imagens JPEG subamostradas 4:1:1 sem perda de qualidade, bem como descompactá-las e convertê-las no modelo de cores YUV.
  • Cálculo significativamente acelerado de tabelas de Huffman ideais. Para imagens pequenas (256×256), a mudança permitiu que o tempo de compressão fosse reduzido em até duas vezes.
  • Adicionada a capacidade de aplicar codificação de entropia aritmética para imagens JPEG com representação de cores de 12 bits por canal.
  • A API do TurboJPEG foi significativamente redesenhada para remover as limitações existentes e aumentar a extensibilidade. Por exemplo, todas as funções C agora são prefixadas com "tj3".
  • Muitos sinalizadores e modos foram convertidos de argumentos de função para parâmetros gerais da API.
  • Suporte para imagens com 12 e 16 bits de cor por canal nos modos com e sem perdas.
  • Foi adicionado o modo de arquivo JPEG sem perdas, disponível para imagens com 8, 12 e 16 bits de cor por canal. Adicionada nova função jpeg_enable_lossless() e opção de linha de comando “-lossless”.
  • Removidos campos, construtores e métodos obsoletos na API Java TurboJPEG.

Finalmente, deve-se mencionar que, no futuro, o autor do libjpeg-turbo pretende restringir o trabalho no projeto para apenas liberar atualizações com correções de bugs. O desenvolvimento da nova versão 3.1 não começará até que o financiamento para o projeto seja obtido.

Para quem tiver interesse no código , ele é distribuído sob três licenças semelhantes à BSD: IJG, modificada pela BSD e zlib. Os binários estão disponíveis para Linux, macOS e Windows. Você pode encontrar mais detalhes e baixar os binários no seguinte link.


Adicionar como fonte preferencial no Google