[Conceptos básicos de Linux]: subsistema multimedia de Linux

1. ¿Por qué existe un subsistema como los medios?

En el marco de la multimedia, siempre los hay complejos y diversos Para resolver la complejidad y fluidez de los datos de los dispositivos multimedia, se crea un subsistema de medios. Media utiliza una estructura de árbol para conectar cada dispositivo de la ruta de datos multimedia para facilitar la gestión y el control de cada dispositivo.

Dos, marco de medios

Al arrancar, en [media-devnode.c], al dispositivo de medios se le asignará un número de dispositivo principal a través de la función media_devnode_init (). El número de dispositivo menor va de 0 a 255, y se registrará un bus llamado "media" al mismo tiempo. En este momento, es solo una aplicación para asignar un número de dispositivo llamado media. El registro del dispositivo de medios específico se registrará en el controlador de dispositivo correspondiente.

Tomemos la cámara como ejemplo para presentar el proceso del marco de medios. Antes de comprender el marco de medios, primero comprenda el proceso de registro del dispositivo de la cámara. Al registrar el nodo / dev / videoX, el proceso de operación principal es el siguiente:

1. Inicialice cada v4l2_subdevice a través de la sonda de plataforma;

2. Primero registre v4l2_device a través de la función v4l2_device_register ();

3. Registre el dispositivo / dev / mediaX llamando sucesivamente a las funciones media_device_init () y media_device_register () En este momento, configure v4l2_dev-> mdev = media_dev;

4. Registre cada subdispositivo v4l2. Al mismo tiempo, al registrar cada subdispositivo, el subdispositivo se registrará como una entidad en media_dev;

5. Registrar el nodo / dev / videoX a través de la función video_register_device (). Hasta ahora, cada subdispositivo v4l2_s ha sido registrado. El siguiente paso es realizar la conexión correspondiente y configurar la ruta de datos de acuerdo a las necesidades de cada subdispositivo;

3. Entidad y equipo de medios

De hecho, el dispositivo / dev / mediaX es un dispositivo de caracteres, pero está encapsulado por una capa del marco de medios, pero el número de dispositivo principal y el número de dispositivo menor del dispositivo registrado se obtienen del dispositivo de medios previamente asignado.

La forma de entender el dispositivo y la entidad de los medios se puede entender simplemente. El dispositivo de medios es el director de un departamento y la entidad es cada subordinado. El dispositivo de medios será responsable de coordinar la entidad y administrar el flujo de cada ruta de datos . Entonces, echemos un vistazo a cómo se registran las entidades.

Tomamos la cámara como ejemplo para entender el marco de medios. En el dispositivo del nodo / dev / videoX, el nodo se administra a través de la estructura struct video_device, y en esta estructura, se incluirá la estructura struct v4l2_device de v4l2_device, y en el v4l2 device En la estructura de, contendrá la estructura struct media_device del dispositivo de medios, y eso es todo, capa por capa.

Al registrar un subdispositivo v4l2 a través de la función v4l2_device_register_subdev (), se llamará a la función media_device_register_entity () para registrar el subdispositivo v4l2 como una entidad en el dispositivo de medios. Al mismo tiempo, habrá operaciones como la inicialización de los pads de entidad .

Uno de los objetivos del marco de medios es descubrir la topología interna del dispositivo y configurarlo en tiempo real. Para lograr este objetivo, los dispositivos de hardware se modelan como bloques de construcción gráficos, llamados entidades conectadas por pads. Una entidad es un componente básico de hardware de medios. Puede comunicarse con una gran cantidad de módulos lógicos, como dispositivos de hardware físico (sensores CMOS), dispositivos de hardware lógico (un primer bloque de construcción de la tubería de procesamiento de gráficos SOC), canales DMA o conectores físicos. El pad es el punto final de la conexión que se utiliza para comunicarse entre la entidad y otras entidades. Los datos generados por una entidad (no solo el video) fluyen desde la salida de la entidad hasta la entrada de una o más entidades. Las almohadillas no deben confundirse con los pines físicos del chip. Un enlace es una conexión punto a punto entre dos pads. Cada entidad ha sido registrada con los medios. Luego, echemos un vistazo a cómo funciona el enlace entre entidades.

四 、 enlace de entidad

El enlace de la entidad de medios se completa con la función media_create_pad_link (struct media_entity * source, u16 source_pad, struct media_entity * sink, u16 sink_pad, u32 flags) . Para la declaración de esta función, debe ingresar la entidad de origen y el pad de origen, la entidad de sumidero y el pad de sumidero. El número de cada almohadilla de entidad se conoce de antemano, por lo que cuando se conecta, naturalmente sabe qué almohadilla necesita usar. Al vincular, en realidad es para crear un enlace de medios para la fuente y el receptor, respectivamente, agregarlos al dispositivo de medios y asignar el enlace a la fuente y al receptor. En este punto, simplemente he entendido el dispositivo, la entidad, el pad y el enlace de los medios. Entonces, ¿por qué usamos este conjunto de marcos?

5. ¿Cuál es el uso del marco multimedia?

5.1. Negociación

Sabemos que en el proceso de uso de la cámara, hay varios módulos que necesitan cooperar entre sí. El flujo de datos simple es el siguiente:

sensor ---> CPHY ---> csi ---> isp ---> flujo

Luego, cuando establezcamos el formato de salida de la imagen de la cámara, necesitaremos confirmar que toda la canalización es compatible con este formato. En este momento, podemos usar las funciones media_entity_graph_walk_init (), media_entity_graph_walk_start (), media_entity_graph_walk_next (), etc. por el marco de medios. La función comienza a atravesar las diversas entidades de la tubería, confirma que cada entidad admite el formato y completa un proceso de negociación de datos.

Al mismo tiempo, cuando la plataforma admite escalado, puede generar diferentes tamaños de resolución de la misma fuente después del escalador, una entidad, múltiples salidas, lo que también es muy conveniente para la gestión de datos a través del marco de medios.

5.2, control

La mayoría de los fabricantes de SOC no abren sus algoritmos de ISP, pero el kernel de Linux es de código abierto. En este momento, los fabricantes de SOC colocarán sus algoritmos de ISP en la capa de aplicación. En este momento, deben operar en el kernel a través de la capa de aplicación. El marco de medios gestiona toda la ruta de datos, por lo que aquí es muy conveniente operar el ISP y otro hardware a través del marco de medios.

Al registrar un dispositivo multimedia, en la función _media_device_register (), asigne media devnode fops a media_device_fops. Y media_device_fops opera principalmente dispositivos multimedia a través de ioctl. Las operaciones siguientes son compatibles:

static const struct meida_ioctl_info ioctl_info[] = {
    MEDIA_IOC(DEVICE_INFO, media_device_get_info, MEDIA_IOC_FL_GRAPH_MUTEX),
    MEDIA_IOC(ENUM_ENTITIES, media_device_enum_entities, MEDIA_IOC_FL_GRAPH_MUTEX),
    MEDIA_IOC(ENUM_LINKS, media_device_enum_links, MEDIA_IOC_FL_GRAPH_MUTEX),
    MEDIA_IOC(SETUP_LINK, media_device_setup_link, MEDIA_IOC_GRAPH_MUTEX),
    MEDIA_IOC(G_TOPOLOGY, media_device_get_topology, MEIDA_IOC_FL_GRAPH_MUTEX),
};

A través de estos ioctls, puede obtener el identificador de la entidad correspondiente para controlar el funcionamiento del módulo correspondiente.

Al mismo tiempo, cada entidad se abre en la capa de aplicación y el monitoreo de eventos se establece a través de VIDIOC_SUBSCRIBE_EVENT. Cuando se genera un evento correspondiente en el kernel, el evento se pasa a la capa de aplicación a través de la función v4l2_event_queue ().

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Supongo que te gusta

Origin blog.csdn.net/u014674293/article/details/111318314
Recomendado
Clasificación