Videoaufnahme

Sobald sich der Stream im KSSTATE_RUN Zustand befindet, beginnt der Erfassungsprozess. Basierend auf dem Frameintervall, das vom AvgTimePerFrame-Member der KS_VIDEOINFOHEADER-Struktur angegeben wird, die beim Öffnen des Datenstroms übergeben wird, überträgt der Stream Bilder in Puffer, die über SRB_READ_DATA übergeben werden. Zusätzliche Informationen zum erfassten Bild werden in der KS_FRAME_INFO-Struktur zurückgegeben, die am Ende der KSSTREAM_HEADER-Struktur angefügt wird.

Der folgende Beispielcode ruft die angefügte KS_FRAME_INFO-Struktur ab:

PKSSTREAM_HEADER pDataPacket = pSrb->CommandData.DataBufferArray;
PKS_FRAME_INFO pFrameInfo = (PKS_FRAME_INFO) (pDataPacket + 1); 

Ein Minitreiber sollte zusätzliche Informationsfelder zu den erfassten Daten festlegen, z. B. erfasste Frames, gelöschte Frames und Feldpolarität. Die Frameinformationen werden in der Regel in einem Member der vom Treiber writer definierten Streamerweiterung gespeichert.

*pFrameInfo = pStrmEx->FrameInfo; // Get the frame info from the minidriver-defined stream extension

Es ist optimal, die PictureNumber - oder DropCount-Member von KS_FRAME_INFO, KS_VBI_FRAME_INFO oder KSPROPERTY_DROPPEDFRAMES_CURRENT_S beim Übergang in den KSSTATE_ACQUIRE Zustand zu aktualisieren.

Es ist akzeptabel, diese Member beim Übergang vom zustand KSSTATE_ACQUIRE in den zustand KSSTATE_PAUSE zu aktualisieren.

Aktualisieren Sie PictureNumber oder DropCount nicht beim Übergang vom KSSTATE_PAUSE zustand in den KSSTATE_RUN zustand oder den KSSTATE_RUN Zustand in den KSSTATE_PAUSE Zustand.

Wenn Frames zuvor gelöscht wurden, sollte der Minitreiber das Diskontinuitätsflag festlegen und dann sein internes Flag zurücksetzen. Der folgende Code veranschaulicht das Festlegen des Datenkontinuitätsflags:

if (pStrmEx->fDiscontinuity) {
    pDataPacket->OptionsFlags |= KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY;
    pStrmEx->fDiscontinuity = FALSE;
}

Schließlich sollte der Minidriver die Kontrolle über den SRB aufgeben und die Frameerfassung abschließen.

CompleteStreamSRB (pSrb);