CrazySage
@CrazySage
C++ developer

Как распараллелить управление камерами Canon в EDSDK через QThread?

Добрый день.

Ситуация следующая — есть две камеры Canon EOS550D подключенные к одному компьютеру, которые хочется заставить сделать снимки максимально одновременно.

Управление осуществляется с помощью EDSDK 2.10

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

При попытке запуска в случае если одна камера некоторое время не может сфокусироваться — вторая не предпринимает ничего, хотя потоки судя по выдаче отладочных сообщений идут честно в параллель.

Это ограничение самого SDK, которое не обойти или я что-то не так делаю?
  • Вопрос задан
  • 3262 просмотра
Пригласить эксперта
Ответы на вопрос 3
ixSci
@ixSci
Для этого были созданы классы потоков на базе QThread

Как минимум вот это. Это не верный подход работы с потоками в Qt.
А вообще, покажите код. Как и где Вы отправляете команду.
Ответ написан
CrazySage
@CrazySage Автор вопроса
C++ developer
С параллельностью в Qt я только начал разбираться, может действительно что-то неправильно понял. Выглядит это так:
В управляющем классе есть два объекта-потока, при необходимости сделать снимок вызывается следующая функция
void CameraController::testShot()
{
		leftCameraThread->setPath(path1);
		leftCameraThread->start();
		rightCameraThread->setPath(path2);
		rightCameraThread->start();
}

Всякие проверки на существование объектов я здесь убрал, чтобы не захламлять сообщение, path1 и path2 — пути по которым будут сохраняться файлы в дальнейшем.
В потоке run() выглядит так:
void CameraControlThread::run()
{
	EdsSendCommand(_camera, kEdsCameraCommand_TakePicture , 0);
}
Ответ написан
@Limosha
Может быть уже поздно, но:

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

К тому же, если работаете на OS X — есть framework, который позволяет работать с PTP-камерами, выполнять простые операции (сделать снимок) и отправлять «сырые» PTP-комманды устройству.

Через PTP (если камера поддерживает) сможете настраивать такие параметры съемки как выдержка, диафрагма, чувствительность и т.д.

Для демонстрации возможностей попробуйте Icarus Camera Control — sourceforge.net/projects/camctl/

Надеюсь, поможет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы