libjpeg-turbo, un códec para codificar y decodificar imágenes JPEG

libjpeg-turbo

libjpeg-turbo se basó originalmente en libjpeg/SIMD , un derivado acelerado por MMX de libjpeg v6b

En Linux cuando se trata del tema de codecs la mayoría de los usuarios no suele preocuparse por ello, ya que en muchas distribuciones este tema suele ya estar resuelto al ser incluidos en la puntería por defecto, ademas de que las aplicaciones de visualización o edición, tambien aportan su granito de arena incluyendo algunos extras.

Pero que pasa cuando un usuario quiere mejorar el rendimiento en ciertos aspectos, dígase para tareas de edición o por simple ocio. En esta parte no todos los usuarios meten mano, pero para los que sí les interesa tienden a investigar las ventajas y desventajas que ofrece cada formato.

Y aquí es donde entra el codec del cual vamos a hablar hoy y es que como tal el formato de imagen JPEG es uno de los más populares, pero esto no quiere decir que es el mejor, ya que existen otros formatos que ofrecen muchas ventajas sobre este.

libjpeg-turbo es una solución a algunas de las deficiencias que presenta JPEG contra otros formatos ya que como se menciona en su repositorio de GitHub:

libjpeg-turbo  es un códec de imagen JPEG que utiliza instrucciones SIMD para acelerar la compresión y descompresión JPEG de referencia en sistemas x86, x86-64, Arm, PowerPC y MIPS, así como la compresión JPEG progresiva en sistemas x86, x86-64 y Arm . En tales sistemas, libjpeg-turbo es generalmente de 2 a 6 veces más rápido que libjpeg, todo lo demás es igual. En otros tipos de sistemas, libjpeg-turbo aún puede superar a libjpeg en una cantidad significativa, en virtud de sus rutinas de codificación Huffman altamente optimizadas. En muchos casos, el rendimiento de libjpeg-turbo rivaliza con el de los códecs JPEG de alta velocidad patentados.

libjpeg-turbo implementa tanto la API libjpeg tradicional como la API TurboJPEG menos potente pero más sencilla. libjpeg-turbo también cuenta con extensiones de espacio de color que le permiten comprimir/descomprimir a búferes de píxeles de 32 bits y big-endian (RGBX, XBGR, etc.), así como una interfaz Java con todas las funciones.

Libjpeg-turbo es una bifurcación compatible con API/ABI de la biblioteca clásica libjpeg, cuyo objetivo es proporcionar la velocidad de codificación y decodificación más rápida. Además de la API libjpeg estándar, la biblioteca proporciona su propia API TurboJPEG y una serie de extensiones con modelos de representación de color que permiten comprimir imágenes en búferes de píxeles de 32 bits (RGBX, XBGR) o decodificarlos.

En otras arquitecturas, la aceleración no es tan significativa, pero debido al uso de funciones de codificación Huffman optimizadas, la biblioteca sigue siendo notablemente más rápida que libjpeg y se acerca en términos de rendimiento a los códecs JPEG patentados de alta calidad.

Cabe mencionar que hace poco libjpeg-turbo recibió su nueva rama 3.0 y de las principales innovaciones que se destacan de esta nueva versión, se mencionan las siguientes:

  • Se agregó soporte para submuestreo de color 4:1:1, lo que le permite convertir, recortar y rotar imágenes JPEG con submuestreo 4:1:1 sin pérdida de calidad, así como descomprimirlas y convertirlas al modelo de color YUV.
  • Cálculo significativamente acelerado de tablas de Huffman óptimas. Para imágenes pequeñas (256×256), el cambio permitió reducir el tiempo de compresión hasta dos veces.
  • Se agregó la capacidad de aplicar codificación de entropía aritmética para imágenes JPEG con representación de color de 12 bits por canal.
  • La API de TurboJPEG se ha rediseñado significativamente para eliminar las limitaciones existentes y aumentar la extensibilidad. Por ejemplo, todas las funciones de C ahora tienen el prefijo «tj3».
  • Muchos indicadores y modos se han convertido de argumentos de función a parámetros API generales.
  • Soporte para imágenes con 12 y 16 bits de color por canal en modos con pérdida y sin pérdida.
  • Se ha agregado el modo de archivo JPEG sin pérdidas, que está disponible para imágenes con 8, 12 y 16 bits de color por canal. Se agregó la nueva función jpeg_enable_lossless() y la opción de línea de comando «-lossless».
  • Se eliminaron los campos, constructores y métodos en desuso en la API TurboJPEG de Java.

Finalmente, cabe mencionar que en el futuro, el autor de libjpeg-turbo tiene la intención de restringir el trabajo en el proyecto para lanzar solo actualizaciones con correcciones de errores. El desarrollo de la nueva versión 3.1 no comenzará hasta que se obtenga el financiamiento para el proyecto.

Para los interesados en el código deben saber que se distribuye bajo tres licencias tipo BSD IJG, modificadas por BSD y zlib y se ofrecen binarios preparados para Linux, macOS y Windows. Puedes consultar los detalles, asi como obtener los binarios desde el siguiente enlace.


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.