Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Общий доступ к прямой памяти буфера (DMA) возникает, когда устройство не записывает непосредственно в буферы записи; вместо этого он копирует данные в общий буфер и из него.
Чтобы использовать DMA общего буфера в минидрайвере AVStream, следуйте следующим шагам.
Получите адаптер DMA, вызвав IoGetDmaAdapter, как в случае пакетной DMA. Не указывайте KSPIN_FLAG_GENERATE_MAPPINGS в элементе Flags структуры KSPIN_DESCRIPTOR_EX и не регистрируйте адаптер DMA в AVStream. Возможно, вам потребуется реализовать собственную частную схему буфера или копирования.
Регистрация подпрограммы службы прерываний (ISR), как описано в документации «Написание мини-драйверов AVStream для оборудования»
Если элемент Flags структуры KSPIN_DESCRIPTOR_EX устанавливает значение KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING, перед вызовом AVStrMiniPinProcess выполняется следующее:
Минидрайвер настраивает общие буферные передачи.
Ядро вызывает ISR, зарегистрированное поставщиком ранее. В ISR, минидрайвер ставит в очередь отложенный вызов процедуры (DPC).
Когда общий буфер заполнен, минидрайвер вызывает KsPinAttemptProcessing из DPC.
AVStream вызывает обработку процесса, если выполняются условия, указанные членом Flags из KSPIN_DESCRIPTOR_EX.
В рамках подпрограммы обратного вызова AVStrMiniPinProcess один из возможных вариантов действий заключается в следующем:
Вызов KsPinGetLeadingEdgeStreamPointer:
KSSTREAM_POINTER *Leading = KsPinGetLeadingEdgeStreamPointer ( Pin, State );Скопируйте данные кадра в Leading-StreamHeader-Data>>, а затем установите необходимые флаги и сведения о метках времени в соответствующем KSSTREAM_HEADER.
Вызов KsStreamPointerUnlock с параметром Eject , равным TRUE. (Это значение Eject приводит к перемещению указателя потока вперёд.)
Вернуть STATUS_PENDING.
AvStream затем управляет очередью на основе флагов, заданных минидрайвером в структуре KSPIN_DESCRIPTOR_EX.