Вывод камеры при выполнении функций, медленное преобразование из Linux в Windows (C ++) - PullRequest
1 голос
/ 22 января 2009

Я знаю, что это, вероятно, общее, пожалуйста, потерпи меня!

У нас есть программа, которая использует веб-камеру и, в зависимости от того, что видит камера, запускает определенные функции. Программа отлично работает на MacOS и Linux, компилируется и запускается на Windows, но пара функций (в том числе с итерацией пиксель за пикселем, 640x480) понижают FPS до 1 или меньше , Время от времени бросая его, чтобы заморозить в течение нескольких секунд.

Как я уже сказал, я знаю, что это очень общее ... Я просто (отчаянно) надеялся на чей-либо вклад в возможные объяснения? Эти же функции прекрасно работают на других платформах. Мне любопытно, возможно, камера работает в своем собственном потоке, который застрял? Может быть, мы просто не ищем подходящих мест для оптимизации? И есть ли ресурс о том, что оптимизировать при переносе кода на Windows?

Большое спасибо, и любой вклад очень приветствуется!

<<< РЕДАКТИРОВАТЬ >>>

Что касается исходного кода видео, я использую ewclib и

const char * m_buffer;

EWC_Open(MEDIASUBTYPE_RGB24, 640, 480, FPS, true);

    m_buffer = new unsigned char[EWC_GetBufferSize(0)];

EWC_GetImage(0, m_buffer);

Ответы [ 3 ]

2 голосов
/ 22 января 2009

Что вы используете для компиляции программы в Windows? Visual Studio? Cygwin? Вы уверены, что не компилируете отладочную версию? Вы включили оптимизацию компилятора? Вы также можете проверить свои типы данных. Возможно, вы предполагаете, что int равен 64 битам, тогда как вы можете использовать 32-битную Windows, где она 32 битная.

1 голос
/ 22 января 2009

Гипотеза rmeador о том, что Windows медленная , просто смешна: кроме захвата изображения, все действия находятся в пользовательском пространстве, никаких системных вызовов не требуется. Поэтому я бы предложил удалить весь код распознавания / функции и посмотреть, сохраняется ли проблема.

Если это так, проверьте механизм захвата изображения. Возможно, вы приобретаете и отпускаете ручку камеры каждый раз, когда делаете снимок.

В противном случае используйте обычный профилировщик, чтобы найти слабые места. Если вы подозреваете, что манипулирование пикселями может быть ошибочным, убедитесь, что вы делаете это в пространстве пользователя. Я не знаком с программированием Windows, но могу представить, что проблема может заключаться в том, что вы работаете на ресурсе Windows для манипулирования / чтения и вызова для каждого пикселя.

0 голосов
/ 22 января 2009

Вы вызываете EWC_Open для каждого кадра или только один раз в начале? Если библиотека реализована в DirectShow и EWC_Open запускает график, это будет довольно медленно.

...