Запуск и остановка получения изображений

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

Механизм вызывает stopCapture() вашего адаптера функционируйте, когда пользователь вызовет stop или closepreview функция на объекте ввода видео, или когда конкретное количество систем координат было получено и приобретение, завершена. Например,

vid = videoinput('winvideo',1);
set(vid,'FramesPerTrigger',1000); // 
start(vid);
stop(vid);

Предложенный Алгоритм для startCapture ()

startCapture() функция обычно выполняет следующие задачи.

  1. Проверяйте, происходит ли приобретение уже, с помощью IAdaptor функция членства isAcquiring(). Если это, выход.

  2. Отправьте сообщение в поток приобретения, с помощью Windows® PostThreadMessage() функция, говоря ему начать получать фреймы изображения от устройства. Смотрите Отправку сообщения к Потоку Приобретения для получения дополнительной информации.

    Примечание

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

startCapture() функционируйте также обычно убеждается, что последние свойства объектов получения изображений используются (см., что Реализация Добирается и Поддержка Набора Device-Specific Properties), и конфигурирует аппаратные триггеры, если поддержано и установлено (см. Аппаратные Триггеры Поддержки).

Отправка сообщения к потоку приобретения

Чтобы отправить сообщение в поток, используйте Windows PostThreadMessage() функция. Функция потока приобретения адаптера использует Windows GetMessage() функция, чтобы получить эти сообщения — видит Пример: Открытие Связи.

PostThreadMessage() функция принимает эти параметры:

BOOL PostThreadMessage( DWORD idThread,
                        UINT Msg,
                        WPARAM wParam,
                        LPARAM lParam
);

Следующая таблица описывает, как установить эти параметры для адаптера. Для получения дополнительной информации о передающих сообщениях потока, смотрите Microsoft Docs.

Параметр

Описание

idThread

Идентификатор потока, к которому сообщение должно быть добавлено, возвращенное CreateThread().

Msg

Обменивайтесь сообщениями, чтобы быть отправленными. Microsoft® задает область значений значений для пользовательских сообщений, начинаясь со значения WM_USER.

wParam

Дополнительная специфичная для сообщения информация

lParam

Дополнительная специфичная для сообщения информация

Пример: инициирование приобретения

Этот пример иллюстрирует простой startCapture() функция. Эта функция не берет аргументов и возвращает булево значение, указывающее, является ли объект ввода видео в start состояние.

  1. Замените тупиковую реализацию в 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;
    }
    
  2. Запустите MATLAB и запустите свой адаптер, чтобы проверить, что ваш поток приобретения добирается, запуск передают from startCapture().

Предложенный Алгоритм для stopCapture ()

stopcapture() функция обычно выполняет эти задачи.

  1. Проверки, останавливается ли адаптер уже путем вызова isAcquiring() функция. Если устройство в настоящее время не получает данные, возвратите true.

  2. Останавливает цикл приобретения системы координат и останавливает устройство, при необходимости

    Примечание

    Важно не выйти из 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() функция в демонстрационном адаптере обеспечивает другой пример того, как остановить цикл приобретения системы координат. Адаптер задает переменную флага, которую он проверяет каждый раз, когда он вводит цикл приобретения системы координат. Чтобы убежать из цикла приобретения системы координат, демонстрационный адаптер устанавливает эту переменную флага на ложь. Дополнительную информацию см. в демонстрационном исходном коде адаптера.