У меня могут быть некоторые заблуждения, так что терпите меня.
Я написал программу, которая захватывает изображения с камеры. Я делю память между камерой и моим приложением с помощью mmap
, как я нашел в документации V4L2 . Это прекрасно работает. Теперь мой процессор (это DM3730 от TI) также имеет DSP. Я хочу использовать DSP, но для этого требуется физическая непрерывная память. TI предоставляет драйверы для выделения памяти. Моя проблема в том, что сейчас я теряю много времени, чтобы скопировать память mmap в физическую непрерывную память. Есть ли способ сказать mmap, что он не должен выделять память самостоятельно, но я говорю mmap использовать память, которую я выделяю.
Чтобы дать вам представление о том, что я делаю (конечно, много кода не хватает, но я очень близко придерживался документации по V4L2. Надеюсь, этого достаточно, чтобы понять мою проблему):
//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);
После этого я копирую память из несмежной памяти в смежную память всякий раз, когда кадр готов.
...
//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);
...
Как я могу сразу получить кадры в физическую непрерывную память?