IBasicVideo::GetCurrentImage 메서드(control.h)

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngineMedia Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 DirectShow 대신 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

메서드는 GetCurrentImage 렌더러에서 대기 중인 현재 이미지를 검색합니다.

구문

HRESULT GetCurrentImage(
  [in, out] long *pBufferSize,
  [out]     long *pDIBImage
);

매개 변수

[in, out] pBufferSize

호출자가 전달하는 버퍼의 크기를 포함하는 변수에 대한 포인터입니다. pDIBImageNULL이면 이 매개 변수는 필요한 버퍼 크기를 받습니다.

[out] pDIBImage

전체 이미지가 DIB(디바이스 독립적 비트맵) 형식으로 저장되는 버퍼에 대한 포인터입니다. 포인터를 긴 포인터 형식으로 캐스팅합니다.

반환 값

HRESULT 값을 반환합니다.

설명

Video Renderer 필터와 VMR(Video Mixing Renderer)은 이 메서드를 다르게 구현합니다.

Video Renderer만 해당:

렌더러가 DirectDraw 가속을 사용하는 경우 이 메서드는 실패합니다. 아쉽게도 최종 사용자의 하드웨어 구성에 따라 달라지므로 실제로 이 메서드는 신뢰할 수 없습니다.

이 메서드를 호출하기 전에 Video Renderer를 일시 중지합니다. 그렇지 않으면 메서드는 VFW_E_NOT_PAUSED 반환합니다. IMediaControl::GetState를 호출하여 일시 중지 작업이 완료되었는지 확인합니다. 일시 중지 작업이 완료되지 않은 경우 GetCurrentImage 메서드는 E_UNEXPECTED 반환합니다. 원본 필터에서 사용할 수 있는 데이터에 따라 비디오 렌더러는 이 요청을 처리하도록 보장되지 않습니다. 사용할 수 있는 이미지가 없으면 E_FAIL 반환합니다.

비디오 혼합 렌더러만 해당:

이 메서드는 VMR이 DirectDraw 가속을 사용하는지 여부와 현재 그래프 상태(실행 중, 중지 또는 일시 중지됨)에 관계없이 신뢰할 수 있습니다.

비디오 렌더러 및 비디오 혼합 렌더러:

이미지를 보유하는 데 필요한 버퍼 크기를 가져오려면 pDIBImage 매개 변수에서 NULL 포인터를 사용하여 이 메서드를 호출합니다. 메서드는 pBufferSize 매개 변수에 필요한 버퍼 크기를 반환합니다. 해당 크기의 버퍼를 할당하고 pDIBImage 가 버퍼를 가리키는 메서드를 다시 호출합니다. 두 번째 호출에서 pBufferSize 를 사용하여 버퍼 크기를 지정합니다. 버퍼가 너무 작아서 전체 이미지를 보유하지 못하면 메서드는 E_OUTOFMEMORY 반환합니다.

메서드가 성공하면 버퍼는 BITMAPINFOHEADER 구조체와 Win32 BITMAPINFO 구조체에 정의된 모든 색상표 항목 및 비트 마스크를 포함하여 전체 DIB 이미지로 채워집니다. 이미지의 형식은 원본 필터에서 제공하는 형식에 따라 달라지며 사전에 지정할 수 없습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 control.h(Dshow.h 포함)
라이브러리 Strmiids.lib

추가 정보

오류 및 성공 코드

IBasicVideo 인터페이스