다음을 통해 공유


비디오 캡처

스트림이 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_INFO, KS_VBI_FRAME_INFO 또는 KSPROPERTY_DROPPEDFRAMES_CURRENT_SPictureNumber 또는 DropCount 멤버를 업데이트하는 것이 가장 좋습니다.

KSSTATE_ACQUIRE 상태에서 KSSTATE_PAUSE 상태로 전환할 때 이러한 멤버를 업데이트할 있습니다.

KSSTATE_PAUSE 상태에서 KSSTATE_RUN 상태 또는 KSSTATE_RUN 상태로 전환할 때 PictureNumber 또는 DropCountKSSTATE_PAUSE 상태로 업데이트하지 마세요.

프레임이 이전에 삭제된 경우 미니 드라이버는 불연속성 플래그를 설정한 다음 내부 플래그를 다시 설정해야 합니다. 다음 코드에서는 데이터 불연속성 플래그를 설정하는 방법을 보여 줍니다.

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

마지막으로 미니드라이버가 SRB의 컨트롤을 포기하고 프레임 캡처를 완료해야 합니다.

CompleteStreamSRB (pSrb);