Поделиться через


Поток данных использование изохронных каналов

USBCAMD2 начинает потоковую передачу по изохронному каналу, запрашивая две передачи 32 пакетов. Каждый пакет имеет максимальный размер, соответствующий максимальному размеру в выбранном альтернативном параметре.

Примечание Потоковая передача по изохронному каналу не зависит от потоковой передачи Microsoft DirectShow.

Изохронные запросы на передачу с двойным буфером постоянно отправляются в USBCAMD2 и останавливаются только в том случае, если возникает одно из следующих двух условий:

  1. Выдается состояние потока stop DirectShow (KSSTATE_STOP).

  2. Мини-диск камеры запрашивает у USBCAMD2 остановку изохронной потоковой передачи, передав флаг USBCAMD_STOP_STREAMING в параметре PipeStateFlags в вызове USBCAMD_SetIsoPipeState.

Во время потоковой передачи USBCAMD2 и мини-диск камеры повторяют следующую процедуру, пока потоковая передача не остановится:

  1. USBCAMD2 вызывает функцию обратного вызова CamProcessUSBPacketEx мини-драйвера камеры (в IRQL = DISPATCH_LEVEL) для каждого пакета, который USBCAMD2 получает от драйвера шины USB. Мини-диск камеры должен установить соответствующие флаги ошибок в случае возникновения ошибок. Мини-диск также должен установить новый флаг видеокадра, если начало нового видеокадра обнаружено с помощью параметра FrameCompleteобъекта CamProcessUSBPacketEx.

  2. После того как мини-диск камеры определит, что видеокадр завершен, USBCAMD2 вызывает функцию обратного вызова CamProcessRawVideoFrameEx мини-драйвера камеры (из контекста рабочего потока) для обработки видеокадра, если необходимо выполнить преобразование цветового пространства или распаковку. USBCAMD2 возвращает завершенный необработанный кадр драйверу классаstream.sys для обработки мини-накопителем камеры в IRQL = PASSIVE_LEVEL. Если недостаточно данных кадра или произошла ошибка во время распаковки из-за неправильных данных, то параметру BytesReturnedcamProcessRawVideoFrameEx необходимо задать значение 0.