Параллельное управление камерами Canon через EDSDK

У меня следующая проблема: у меня есть две камеры EOS550D, подключенные к моему компьютеру. В моей программе есть класс на основе QThread, который отправляет команды камерам. Различить две камеры не составляет труда, обеими можно управлять, но хоть команды и идут параллельно - вторая камера начинает работать только после того, как первая сфокусировалась и сделала снимок. Это ограничение SDK или я что-то не так делаю? Я знал, что эту задачу можно решить, используя два компьютера и клиент-серверную архитектуру, но я хочу попробовать это на одном компьютере)

EDSDK и камеры инициализируются в классе управления, сеансы для камер управляются в объектах класса потока. Призыв к треду:

void CameraController::testShot()
{
//some variable checks and path set-ups
leftCameraThread->setPath(path1);
leftCameraThread->start();
rightCameraThread->setPath(path2);
rightCameraThread->start();
}

Функция запуска потока():

void CameraControlThread::run()
{
EdsSendCommand(_camera, kEdsCameraCommand_TakePicture , 0);
}

ЭСДК v2.10


person Crazy Sage    schedule 28.06.2012    source источник
comment
Вы можете захотеть вывести временную метку высокой точности непосредственно перед вводом команды и после ее возврата.   -  person PlasmaHH    schedule 28.06.2012
comment
Что мне это даст? Был простой тест - я повернул первую камеру к стене, так она не могла сфокусироваться около двух секунд. Я думаю, что двух секунд более чем достаточно, чтобы отправить еще одну команду.   -  person Crazy Sage    schedule 29.06.2012
comment
Это даст вам время фактической отправки команд (или, по крайней мере, время выполнения системных вызовов). Таким образом, вы можете видеть 1) сколько времени занимает команда и 2) если разница во времени уже на уровне выдачи системного вызова.   -  person PlasmaHH    schedule 29.06.2012


Ответы (4)


Вы можете управлять более чем одной камерой в SDK 2.11. стр. 26

person Fernando    schedule 12.10.2012
comment
Пожалуйста, опубликуйте для будущих читателей краткое изложение документации о его проблеме. Ссылка может потеряться. Он управляет более чем одной камерой, но ... вторая камера начинает работать только после того, как первая сфокусировалась ... и это ограничение SDK или я что-то не так делаю? - person Adriano Repetti; 13.10.2012

Прочтите документацию EDSDK, в ней говорится, что вы можете открывать только один сеанс одновременно, и это ограничение SDK (2.10, стр. 25).

person Albert    schedule 08.08.2012

В документации EDSDK (версия 2.15, EDSDK_API.pdf, раздел 2.10) указано, что «Обратите внимание, что EDSDK не поддерживает открытие сеансов с более чем одной камерой одновременно».

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

Вопрос ОП касается одновременного запуска нескольких камер. Каждый вызов kEdsCameraCommand_TakePicture будет отправлять триггер на одну камеру, и этот вызов занимает некоторое время. Таким образом, если вы выполните итерацию для всех камер и отправите каждой из них kEdsCameraCommand_TakePicture, камеры не будут срабатывать синхронно. Например, с 16 EOS 1dx для получения всех изображений требуется 4 секунды. Я не нашел способа отправить триггер одновременно на несколько камер в SDK. (кто-нибудь?) Помимо программных ограничений в SDK, может быть невозможно добиться идеальной синхронизации через USB-соединение. Рекомендуемый способ добиться синхронизации на нескольких камерах — использовать внешний сигнал синхронизации с триггерным разъемом камеры.

person Etienne D.    schedule 28.11.2014

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

person e.jahandar    schedule 28.12.2016