Однажды openDevice()
возвращается успешно, механизм вызывает startCapture()
вашего адаптера функционируйте, чтобы начать получать данные.
Механизм вызывает stopCapture()
вашего адаптера функционируйте, когда пользователь вызовет
stop
или closepreview
функция на объекте ввода видео, или когда конкретное количество систем координат было получено и приобретение, завершена. Например,
vid = videoinput('winvideo',1); set(vid,'FramesPerTrigger',1000); // start(vid); stop(vid);
startCapture()
функция обычно выполняет следующие задачи.
Проверяйте, происходит ли приобретение уже, с помощью IAdaptor
функция членства isAcquiring()
. Если это, выход.
Отправьте сообщение в поток приобретения, с помощью Windows® PostThreadMessage()
функция, говоря ему начать получать фреймы изображения от устройства. Смотрите Отправку сообщения к Потоку Приобретения для получения дополнительной информации.
Примечание
Отправка сообщения запуска к потоку приобретения только требуется, если ваш адаптер использует основанный на потоке проект. Адаптеры могут также использовать асинхронные прерывания (коллбэки), чтобы получить системы координат, если устройство поддерживает это. Обратитесь к документации, которая шла с SDK вашего устройства для получения дополнительной информации.
startCapture()
функционируйте также обычно убеждается, что последние свойства объектов получения изображений используются (см., что Реализация Добирается и Поддержка Набора Device-Specific Properties), и конфигурирует аппаратные триггеры, если поддержано и установлено (см. Аппаратные Триггеры Поддержки).
Чтобы отправить сообщение в поток, используйте Windows PostThreadMessage()
функция. Функция потока приобретения адаптера использует Windows GetMessage()
функция, чтобы получить эти сообщения — видит Пример: Открытие Связи.
PostThreadMessage()
функция принимает эти параметры:
BOOL PostThreadMessage( DWORD idThread, UINT Msg, WPARAM wParam, LPARAM lParam );
Следующая таблица описывает, как установить эти параметры для адаптера. Для получения дополнительной информации о передающих сообщениях потока, смотрите Microsoft Docs.
Параметр | Описание |
---|---|
| Идентификатор потока, к которому сообщение должно быть добавлено, возвращенное |
| Обменивайтесь сообщениями, чтобы быть отправленными. Microsoft® задает область значений значений для пользовательских сообщений, начинаясь со значения |
| Дополнительная специфичная для сообщения информация |
| Дополнительная специфичная для сообщения информация |
Этот пример иллюстрирует простой startCapture()
функция. Эта функция не берет аргументов и возвращает булево значение, указывающее, является ли объект ввода видео в start
состояние.
Замените тупиковую реализацию в MyDeviceAdaptor.cpp
файл с этим кодом и затем восстанавливает ваш адаптер.
bool MyDeviceAdaptor::startCapture(){ // Check if device is already acquiring frames. if (isAcquiring()) return false; // Send start message to acquisition thread PostThreadMessage(_acquireThreadID, WM_USER, 0, 0); return true; }
Запустите MATLAB и запустите свой адаптер, чтобы проверить, что ваш поток приобретения добирается, запуск передают from startCapture()
.
stopcapture()
функция обычно выполняет эти задачи.
Проверки, останавливается ли адаптер уже путем вызова isAcquiring()
функция. Если устройство в настоящее время не получает данные, возвратите true
.
Останавливает цикл приобретения системы координат и останавливает устройство, при необходимости
Примечание
Важно не выйти из stopCapture()
функционируйте, в то время как функция потока приобретения все еще получает системы координат. Один способ сделать это должно попытаться получить критический раздел. Когда вы можете получить критический раздел, можно быть уверены, что цикл приобретения системы координат закончился, бросив его критический раздел.
Следующий пример иллюстрирует простой stopCapture()
функция. Эта функция не берет аргументов и возвращает булево значение, указывающее, является ли объект ввода видео в stopped
состояние. Замените тупиковую реализацию в MyDeviceAdaptor.cpp
файл с этим кодом и затем восстанавливает ваш адаптер.
bool MyDeviceAdaptor::stopCapture(){ // If the device is not acquiring data, return. if (!isOpen()) return true; //********************************************************** // Insert calls to your device's SDK to stop the device, if // necessary. //********************************************************** return true; }
stopCapture()
функция в демонстрационном адаптере обеспечивает другой пример того, как остановить цикл приобретения системы координат. Адаптер задает переменную флага, которую он проверяет каждый раз, когда он вводит цикл приобретения системы координат. Чтобы убежать из цикла приобретения системы координат, демонстрационный адаптер устанавливает эту переменную флага на ложь. Дополнительную информацию см. в демонстрационном исходном коде адаптера.