共用方式為


擷取影片

一旦數據流處於 KSSTATE_RUN 狀態,擷取程式就會開始。 根據開啟數據流時所傳遞之 KS_VIDEOINFOHEADER 結構的AvgTimePerFrame成員所指定的框架間隔,數據流會將影像傳輸至通過SRB_READ_DATA的緩衝區。 所擷取之影像的其他資訊會在附加至KSSTREAM_HEADER結構的結尾的 KS_FRAME_INFO 結構中傳回。

下列範例程式代碼會取得附加的 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

最好是在轉換至KSSTATE_ACQUIRE狀態時,更新KS_FRAME_INFOKS_VBI_FRAME_INFOKSPROPERTY_DROPPEDFRAMES_CURRENT_SPictureNumberDropCount 成員。

KSSTATE_ACQUIRE 狀態轉換為 KSSTATE_PAUSE 狀態時,可以接受更新這些成員。

請勿更新從KSSTATE_PAUSE狀態轉換為KSSTATE_RUN狀態或KSSTATE_RUN狀態到KSSTATE_PAUSE狀態的 PictureNumberDropCount

如果先前已卸除框架,minidriver 應該設定不連續旗標,然後重設其內部旗標。 下列程式代碼示範如何設定資料不連續旗標:

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

最後,迷你驅動程式應該放棄 SRB 的控制,完成畫面擷取。

CompleteStreamSRB (pSrb);