IMemAllocator::GetBuffer 메서드(strmif.h)
[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 DirectShow 대신 MediaPlayer, IMFMediaEngine 및 오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
GetBuffer 메서드는 빈 버퍼가 포함된 미디어 샘플을 검색합니다.
구문
HRESULT GetBuffer(
[out] IMediaSample **ppBuffer,
[in] REFERENCE_TIME *pStartTime,
[in] REFERENCE_TIME *pEndTime,
[in] DWORD dwFlags
);
매개 변수
[out] ppBuffer
버퍼의 IMediaSample 인터페이스에 대한 포인터를 받습니다. 호출자는 인터페이스를 해제해야 합니다.
[in] pStartTime
샘플의 시작 시간 또는 NULL에 대한 포인터입니다.
[in] pEndTime
샘플의 종료 시간 또는 NULL에 대한 포인터입니다.
[in] dwFlags
다음 플래그 중 0개 이상의 비트 조합:
플래그 | 설명 |
---|---|
AM_GBF_NOTASYNCPOINT | 이 샘플은 동기화 지점이 아닙니다. 이 샘플에서는 동적 형식 변경이 허용되지 않습니다. 오버레이 믹서 또는 VMR에서 호출되는 경우 이 플래그는 반환된 버퍼에 전달된 마지막 이미지와 동일한 이미지가 포함됨을 의미합니다. |
AM_GBF_PREVFRAMESKIPPED | 이 샘플은 불연속성 이후 첫 번째 샘플입니다. (비디오 렌더러만 이 플래그를 사용합니다.) |
AM_GBF_NOWAIT | 버퍼를 사용할 수 있게 될 때까지 기다리지 마세요. |
AM_GBF_NODDSURFACELOCK | 비디오 혼합 렌더러 필터 7과 함께 잠금 해제된 DirectDraw 표면을 요청하는 데 사용됩니다. 자세한 내용은 Direct3D 렌더링 대상 작업을 참조하세요. |
반환 값
HRESULT 값을 반환합니다. 가능한 값에는 다음 표에 표시된 값이 포함됩니다.
반환 코드 | 설명 |
---|---|
|
성공. |
|
할당자는 커밋 해제됩니다. |
|
초과. |
설명
기본적으로 이 메서드는 무료 샘플을 사용할 수 있거나 할당자가 커밋 해제될 때까지 차단됩니다. 호출자가 AM_GBF_NOWAIT 플래그를 지정하고 샘플을 사용할 수 없는 경우 할당자는 반환 값이 VFW_E_TIMEOUT 즉시 반환할 수 있습니다. 그러나 할당자는 이 플래그를 지원할 필요가 없습니다.
ppBuffer에서 반환된 샘플에는 유효한 버퍼 포인터가 있습니다. 호출자는 타임스탬프, 미디어 시간 또는 동기화 지점 속성과 같은 샘플의 다른 속성을 설정해야 합니다. (자세한 내용은 IMediaSample을 참조하세요.)
pStartTime 및 pEndTime 매개 변수는 샘플에 적용되지 않습니다. 할당자는 이러한 값을 사용하여 검색하는 버퍼를 결정할 수 있습니다. 예를 들어 Video Renderer 필터는 이러한 값을 사용하여 DirectDraw 표면 간 전환을 동기화합니다. 샘플에서 타임스탬프를 설정하려면 IMediaSample::SetTime 메서드를 호출합니다.
이 메서드를 호출하기 전에 IMemAllocator::Commit 메서드를 호출해야 합니다. IMemAllocator::D ecommit 메서드가 호출된 후 이 메서드가 실패합니다.
요구 사항
지원되는 최소 클라이언트 | Windows 2000 Professional[데스크톱 앱만] |
지원되는 최소 서버 | Windows 2000 Server[데스크톱 앱만] |
대상 플랫폼 | Windows |
헤더 | strmif.h(Dshow.h 포함) |
라이브러리 | Strmiids.lib |