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


Переходы состояния

Чтобы обеспечить упорядоченное выделение ресурсов, допускается только подмножество возможных переходов состояния потоковой передачи ядра. В следующей таблице перечислены разрешенные переходы, а также задачи, которые мини-driver класса Stream обычно выполняет во время таких переходов.

Переход Описание

Остановка для приостановки

Выделение ресурсов. После завершения перехода на KSSTATE_PAUSE файлы SRB для чтения помещаются в очередь.

Приостановка выполнения

Начните потоковую передачу.

Запуск для приостановки

Остановить потоковую передачу. Невыполненные СРБ для чтения остаются в очереди, поддерживаемой мини-накопителем.

Приостановка для остановки

Отмените выделение ресурсов и завершите все невыполненные операции чтения SRB. Объекты SRB, которые не были заполнены изображением, завершаются нулевой длиной в элементе DataUsedструктуры KSSTREAM_HEADER .

Примечание . Переходы могут циклически переключаться между состояниями KSSTATE_PAUSE и KSSTATE_RUN , прежде чем вернуться в состояние KSSTATE_STOP . Мини-видеоприводы должны ожидать следующие переходы:

KSSTATE_STOP ->KSSTATE_ACQUIRE ->KSSTATE_PAUSE ->KSSTATE_RUN ->KSSTATE_PAUSE ->KSSTATE_RUN ->KSSTATE_PAUSE -> KSSTATE_STOP

Когда поток находится в KSSTATE_STOP состоянии, мини-диск должен немедленно завершить все незавершенные СРБ для чтения данных.

Так как приложение пользовательского режима может неожиданно завершиться во время потоковой передачи, все мини-драйверы класса Stream должны в любое время принимать и обрабатывать запрос SRB_CLOSE_STREAM из интерфейса класса Stream. Прежде чем интерфейс класса Stream отправляет SRB_CLOSE_STREAM в мини-диск, он отменяет все необработанные буферы с помощью подпрограммы HwCancelPacket мини-драйвера. Обратите внимание, что состояние потока не может быть задано как KSSTATE_STOP до завершения работы приложения.

Не обновляйте элементы PictureNumber или DropCountKS_FRAME_INFO, KS_VBI_FRAME_INFO или KSPROPERTY_DROPPEDFRAMES_CURRENT_S при переходе с KSSTATE_PAUSE на KSSTATE_RUN или KSSTATE_RUN на KSSTATE_PAUSE. Дополнительные сведения см. в разделе Запись видео.