Acquisizione di video

Quando il flusso è nello stato KSSTATE_RUN , inizia il processo di acquisizione. In base all'intervallo di fotogrammi specificato dal membro AvgTimePerFrame della struttura KS_VIDEOINFOHEADER passato quando il flusso viene aperto, il flusso trasferisce le immagini in buffer passati attraverso SRB_READ_DATA. Ulteriori informazioni sull'immagine acquisita vengono restituite nella struttura KS_FRAME_INFO aggiunta alla fine della struttura KSSTREAM_HEADER .

Il codice di esempio seguente ottiene la struttura KS_FRAME_INFO accodata:

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

Un minidriver deve impostare campi di informazioni aggiuntivi sui dati acquisiti, ad esempio fotogrammi acquisiti, fotogrammi rilasciati e polarità dei campi. Le informazioni sui frame vengono in genere archiviate in un membro dell'estensione del flusso definita dal writer driver.

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

È consigliabile aggiornare i membri PictureNumber o DropCount di KS_FRAME_INFO, KS_VBI_FRAME_INFO o KSPROPERTY_DROPPEDFRAMES_CURRENT_S durante la transizione allo stato di KSSTATE_ACQUIRE .

È accettabile aggiornare questi membri durante la transizione dallo stato KSSTATE_ACQUIRE allo stato KSSTATE_PAUSE .

Non aggiornare PictureNumber o DropCount durante la transizione dallo stato di KSSTATE_PAUSE allo stato KSSTATE_RUN o allo stato KSSTATE_RUN allo stato KSSTATE_PAUSE .

Se i fotogrammi sono stati eliminati in precedenza, il minidriver deve impostare il flag di discontinuità e quindi reimpostare il flag interno. Il codice seguente illustra l'impostazione del flag di discontinuità dei dati:

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

Infine, il minidriver deve rinunciare al controllo SRB, completando l'acquisizione dei fotogrammi.

CompleteStreamSRB (pSrb);