¿Controlar la asignación de búfer V4L2/VB2?
-
21-12-2019 - |
Pregunta
Estoy intentando escribir un controlador compatible con V4L2 para un dispositivo de cámara especial que tengo, pero el dispositivo no parece particularmente compatible con el sistema de búfer de V4L2.En lugar de los búferes asignados por separado, quiere un único bloque de memoria contiguo capaz de contener un conjunto de búferes (generalmente 4) y luego proporciona un registro de estado que le indica cuál es el último (actualizado después de que cada cuadro se somete a DMA). al anfitrión).Por lo tanto, básicamente necesita solo un gran fragmento de memoria asignado por DMA para trabajar, no 4 probablemente separados.
¿Cómo puedo usar esto con V4L?Todo lo que veo sobre VIDIOC_CREATE_BUFS
, VIDIOC_REQBUFS
y eso es lo que ocurre con la asignación interna de los buffers, y no puedo obtener nada basado en V4L (como qv4l2
trabajar sin éxito QBUF
y DQBUF
que utiliza su estructura interna.
¿Cómo se puede hacer esto?
Solución
Solo para completar, finalmente encontré una solución en el conductor "Meye".Lo eliminé todo VB2 y escribí mi propio reqbuf, QUERYBUF, QBUF y DQBUF, junto con mis propias rutinas MMAP para manejar la asignación.¡Y todo funciona!