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

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