compresión JPEG en Cortex M4

1

¿Es posible realizar una compresión JPEG en una MCU Cortex-M4? ¿Existen bibliotecas que puedan hacer esto y puedan aceptar un RAW RGB de 10 bits?

    
pregunta krithik

1 respuesta

12

Dado que el núcleo de M4 (y casi cualquier otra CPU utilizada en un controlador de micras) está turing complete , la respuesta a su primera pregunta es , condicional a los otros detalles de la MCU.

En particular, si bien la CPU en sí misma es capaz de cumplir las instrucciones necesarias para realizar la compresión JPEG, debe tener suficiente RAM para implementar el algoritmo elegido, por lo que su pregunta debe incluir detalles adicionales de la MCU específica. Una búsqueda muy rápida en Google indica que las MCU M4 de nivel de entrada incluyen algo así como 64 KiB de RAM, lo cual es casi seguro que es suficiente para realizar al menos una compresión JPEG básica, ya que, con las opciones correctas, JPEG es generalmente un paso múltiple. > compresor de transmisión (es decir, se abre camino a través de los datos sin necesidad de acceso aleatorio). Las excepciones incluyen el paso DCT, pero eso es solo un bloque de 8x8 (quizás hasta 16x16 dependiendo de la configuración de reducción de croma), por lo que solo requiere una pequeña cantidad de RAM.

Para obtener más detalles, debe profundizar en el estándar JPEG y decidir qué subconjunto desea admitir. Como es el propietario del codificador, solo puede generar archivos JPEG utilizando la configuración que se ajuste a sus limitaciones. Esto es muy diferente a escribir un decodificador para archivos JPEG generales, ya que entonces debe ser compatible con las opciones y modos que elija el codificador.

Puede encontrar un buen manual sobre el uso de la memoria en Léame de mozjpeg : es breve , pero al menos incluye información clave, incluido el hecho de que el modo progresivo generalmente no está disponible para su caso de uso, ya que requiere un búfer de imagen completa.

Sobre su segunda pregunta, es poco probable que encuentre una biblioteca existente dirigida específicamente a Cortex-M que acepte RAW. Es posible que tenga que combinar una biblioteca que admita la decodificación RAW con una que admita la codificación JPEG, y asegurarse de que la interfaz entre ellos permita la transmisión. Algo como mozjpeg puede ser un buen comienzo en el lado de JPEG. Es posible que deba ajustar cómo se almacenan los resultados temporales según su configuración exacta.

Si no puede encontrar una biblioteca JPEG que ya esté dirigida a esta MCU, es posible que deba compilar una de las gratuitas existentes. Este parece prometedor, ya que se enfoca explícitamente en las MCU y el uso de poca memoria, pero la página del autor vinculado es 404, que es menos prometedor.

    
respondido por el BeeOnRope

Lea otras preguntas en las etiquetas