Canon SDK: загрузите последнюю версию, сделанную двумя устройствами, на хост

Я пишу Windows-приложение в Visual Studio 2010. Мой хост-компьютер подключен к двум Canon EOS 600D. Пока мне удалось сделать два снимка, загрузить его напрямую (без SD-карты) на хост-компьютер и сохранить снимки под определенным именем на хосте. Если я выполняю свой код в цикле, он также работает нормально (индекс цикла определяет камеру и файл назначения). На следующем шаге я использовал OpenMP2.0 для ускорения цикла (это мой первый проект с OpenMP). Теперь снимки делаются одновременно, но, к сожалению, оба снимка обрабатываются одним и тем же циклом сообщений (камера 0 или камера 1) вместо соответствующего цикла сообщений каждой задачи. В результате изображения из буфера камеры сохраняются в одном файле.

Было бы здорово, если бы у кого-то была идея, как избавиться от этой проблемы. Наиболее выгодным решением с моей точки зрения было бы то, что я сообщаю цикл сообщений (поскольку я обнаружил, что его достаточно), из какой нити / камеры была сделана фотография. Было бы также хорошо, если бы я мог избежать использования Mutex, так как это замедлит мой алгоритм.

Пока это мой обработчик событий, он работает, но нить не должна быть найдена

EdsError EDSCALLBACK fHandleObjectEvent( EdsObjectEvent event,EdsBaseRef object,EdsVoid * context){
if(event){fDownloadImage(object,threadNo}
/// Object must be released
if(object){EdsRelease(object);}
return EDS_ERR_OK;
}

И моя основная функция

int main(int argc, char** argv){
#pragma omp parallel for
for(int ii=0;ii<2;ii++){
fTakePicture(ii);
}
return 0;
}

Заранее спасибо.

Изменить 1: Я только что узнал, что если я отключаю цикл сообщений Windows (процитирую его), программа показывает следующее поведение:

1-е исполнение: сделать 2 снимка

2 исполнение: скачать две картинки из предыдущего исполнения, взять 2 новых картинки

Таким образом, кажется, что номер потока и сообщение каким-то образом сохраняются, и что он переживает выполнение и перезагружается при следующем выполнении (не имеет значения, разрушено главное окно или нет). Поэтому я должен привести его в порядок.

Изменить 2: Теперь я нашел решение, которое, кажется, работает правильно. Я решил это через серийный номер корпуса камеры, но поэтому мне пришлось вернуться к Canon EDSDK версии 2.11.3, так как функция kEdsPropID_BodyIDEx отключен в версии 2.12. Я надеюсь, что это поможет другим пользователям решать аналогичные задачи.

ура
TL

1

Решение

Вы должны различать две камеры, используя параметр «context» обратного вызова. Просто передайте уникальные значения для каждой камеры в качестве последнего параметра при регистрации обратного вызова в EdsSetObjectEventHandler.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]