Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
После того как поток находится в состоянии KSSTATE_RUN , процесс записи начинается. На основе интервала кадров, указанного членом AvgTimePerFrame структуры KS_VIDEOINFOHEADER , передаваемой при открытии потока, поток передает изображения в буферы, передаваемые через SRB_READ_DATA. Дополнительные сведения о захваченном изображении возвращаются в структуре KS_FRAME_INFO , которая добавляется в конец структуры KSSTREAM_HEADER .
Следующий пример кода получает добавленную KS_FRAME_INFO структуру:
PKSSTREAM_HEADER pDataPacket = pSrb->CommandData.DataBufferArray;
PKS_FRAME_INFO pFrameInfo = (PKS_FRAME_INFO) (pDataPacket + 1);
Мини-драйвер должен задать дополнительные поля сведений о захваченных данных, таких как захваченные кадры, пропущенные кадры и полярность поля. Сведения о кадре обычно хранятся в компоненте расширения потока данных, определяемом драйвером-писателем.
*pFrameInfo = pStrmEx->FrameInfo; // Get the frame info from the minidriver-defined stream extension
Наиболее эффективно обновлять элементы PictureNumber или DropCount в KS_FRAME_INFO, KS_VBI_FRAME_INFO или KSPROPERTY_DROPPEDFRAMES_CURRENT_S при переходе в состояние KSSTATE_ACQUIRE.
Можно обновить эти члены при переходе из состояния KSSTATE_ACQUIRE в состояние KSSTATE_PAUSE .
Не обновляйте pictureNumber или DropCount при переходе из состояния KSSTATE_PAUSE в состояние KSSTATE_RUN или состояние KSSTATE_RUN в состояние KSSTATE_PAUSE .
Если кадры были удалены ранее, минидрайвер должен установить флаг разрывности, а затем сбросить его внутренний флаг. Следующий код демонстрирует настройку флага прекращения данных:
if (pStrmEx->fDiscontinuity) {
pDataPacket->OptionsFlags |= KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY;
pStrmEx->fDiscontinuity = FALSE;
}
Наконец, минидрайвер должен освободить управление SRB, завершив захват кадра.
CompleteStreamSRB (pSrb);