¿Utilizando FFmpeg u otras bibliotecas en un SoC ARM sin capa de SO?

1

Me gustaría usar FFmpeg en un SoC ARM para realizar una decodificación. Ahora, como entiendo convencionalmente, todo el mundo lo usa dentro de un entorno de sistema operativo. Sin embargo, me preguntaba si es posible usar FFmpeg o cualquier otra biblioteca sin una capa de sistema operativo.

Quiero decir, es posible, digamos, escribir código C, que se compila en ejecutables, que puede ejecutarse directamente en un procesador ARM sin sistema operativo. Por lo tanto, también debería ser posible vincular de forma estática cualquier otro código fuente de biblioteca al ejecutable y ejecutarlo sin el sistema operativo, ¿no?

    
pregunta user38931

2 respuestas

3

Eso es, por supuesto, posible, PERO ...

es probable que el código ffmpeg realice algunas funciones de biblioteca (¿lee bloques de datos del archivo mpeg?) que proporcionaría el sistema operativo. En una situación que no sea de SO ('bare metal'), debe proporcionar esas funciones de alguna manera.

    
respondido por el Wouter van Ooijen
2

En realidad, creo que sería muy posible. No puedo decirlo con seguridad, por supuesto, pero he pasado dos semanas trabajando en integrar la decodificación de audio FFmpeg en nuestro proyecto principal de Qt, así que sé lo que estoy diciendo.

Resulta que la E / S de datos es completamente personalizable utilizando sus propias devoluciones de llamada. Esto le permite leer / escribir en cualquier dispositivo que haya.

El proceso de decodificación de, por ejemplo, un flujo de audio es el siguiente:

  1. La lectura de los datos y la descomposición de flujos individuales se realiza utilizando la parte avformat de FFmpeg. Aquí es donde entran en juego las devoluciones de llamada de E / S personalizadas. Simplemente apunta los punteros a la función de la estructura AVIOContext hacia donde están los manejadores de E / S.
  2. La decodificación se realiza en la parte avcodec de FFmpeg. Simplemente conecte el paquete demuxed en un decodificador (avcodec_decode_audio4 () creo).
  3. Terminas con audio en bruto que puedes usar directamente, digamos un DAC.

Una cosa que me preocupa, es que en el manual de FFmpeg que mencionan, ciertos códecs pueden usar subprocesos . No conozco ninguna información específica, ni qué API del sistema se usa para la administración de subprocesos. Pero puedes apuntarte en una dirección.

  

Por lo tanto, también debería ser posible vincular estáticamente cualquier otro código fuente de la biblioteca

Y sí, debería ser (es) posible vincular estáticamente en otras bibliotecas en una MCU sin formato.

    
respondido por el Dzarda

Lea otras preguntas en las etiquetas