Вопрос

У меня могут быть некоторые заблуждения здесь, так что терпите меня.

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

Как я мог сразу же получить кадры в физическую смежную память?

Это было полезно?

Решение

Если вы не можете передать результат Memory_alloc() в качестве первого аргумента вашего mmap() (Например, если он также использует mmap (), что сделает невозможным картирование с этой памятью), вам, вероятно, следует использовать другой метод потокового ввода/вывода из приведенный пример - IO_METHOD_USERPTR вариация. Он использует то же самое ioctl в качестве io_method_mmap для захвата кадров и обеспечить аналогичную эффективность.

Другие советы

Вам понадобится поддержка водителя от драйвера камеры. mmap Получает физические страницы, которые он отображает от любого драйвера, который он отображает - в этом случае камера. Вы не можете сказать MMAP использовать некоторые предварительно выделенные страницы, потому что основной драйвер должен был сказать, чтобы использовать эти предварительно выделенные страницы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top