Pregunta

Podría tener algunos conceptos erróneos aquí, así que tengan paciencia conmigo.

Escribí un programa que captura imágenes de una cámara. Estoy compartiendo la memoria entre la cámara y mi aplicación con mmap Como encontré en el Documentación V4L2. Esto funciona muy bien. Ahora mi procesador (es DM3730 de TI) también tiene un DSP. Quiero usar el DSP, pero requiere físico memoria contigua. TI proporciona controladores para asignar la memoria. Mi problema es que en este momento pierdo mucho tiempo para copiar la memoria mmap'ed en la memoria contigua física. ¿Hay alguna forma de decirle a MMAP que no debe asignar la memoria misma, sino que le digo a MMAP que use la memoria que asigno?

Para darle una idea de lo que estoy haciendo (falta mucho código, pero me quedé muy cerca de la documentación V4L2. Espero que esto sea suficiente para entender mi problema):

//reserve physical contiguous memory
dsp_buffer      = Memory_alloc(buffer_length, &myParams); 

...
//reserve memory for buffer, but not contiguous
buffers[n_buffers].start =
     mmap (NULL ,                    /* start anywhere */
     buf.length,
     PROT_READ | PROT_WRITE ,  /* required */                               
     MAP_SHARED ,              /* recommended */
     fd, buf.m.offset);

Después de eso, copio la memoria de la memoria no contigua en la memoria contigua, siempre que un marco esté listo.

...
//wait until frame is ready in memory
r = select (fd + 1, &fds, NULL, NULL, &tv); 
...
//copy the memory over to the physically contiguous memory
memcpy(dsp_buffer,buffers[buf.index].start,size); 
...

¿Cómo podría meter los marcos en la memoria contigua física de inmediato?

¿Fue útil?

Solución

Si no puede pasar el resultado de Memory_alloc() Como primer argumento para tu mmap() (por ejemplo, si también usa mmap () que haría imposible asignar a esa memoria nuevamente), probablemente debería usar otro método de E/S de transmisión desde el ejemplo dado - IO_METHOD_USERPTR variación. Usa lo mismo ioctl como io_method_mmap para capturar marcos y debería proporcionar una eficiencia similar.

Otros consejos

Necesitaría soporte del conductor del controlador de la cámara. mmap Obtiene las páginas físicas que asigna de cualquier controlador que esté mapeo, la cámara en este caso. No puede decirle a MMAP que use algunas páginas previamente asignadas, porque el conductor subyacente tendría que que se le diría que use estas páginas previamente asignadas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top