CBaseAllocator.GetBuffer 메서드

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

메서드는 GetBuffer 버퍼가 포함된 미디어 샘플을 검색합니다. 이 메서드는 IMemAllocator::GetBuffer 메서드를 구현합니다.

구문

HRESULT GetBuffer(
   IMediaSample   **ppBuffer,
   REFERENCE_TIME *pStartTime,
   REFERENCE_TIME *pEndTime,
   DWORD          dwFlags
);

매개 변수

ppBuffer

버퍼의 IMediaSample 인터페이스에 대한 포인터를 받습니다. 호출자는 인터페이스를 해제해야 합니다.

pStartTime

샘플의 시작 시간에 대한 포인터입니다.

pEndTime

샘플의 종료 시간에 대한 포인터입니다.

dwFlags

0개 이상의 플래그의 비트 조합입니다. 기본 클래스는 다음 플래그를 지원합니다.

의미
AM_GBF_NOWAIT
버퍼를 사용할 수 있게 될 때까지 기다리지 마세요.

반환 값

다음 HRESULT 값 중 하나를 반환합니다.

반환 코드 Description
S_OK
성공.
VFW_E_NOT_COMMITTED
할당자가 커밋되지 않았습니다.
VFW_E_TIMEOUT
초과.

설명

호출자가 dwFlags에서 AM_GBF_NOWAIT 플래그를 지정하지 않는 한 이 메서드는 다음 샘플을 사용할 수 있을 때까지 차단합니다.

검색된 미디어 샘플에는 할당된 버퍼에 대한 유효한 포인터가 있습니다. 호출자는 타임스탬프, 미디어 시간 또는 동기화 지점 속성과 같은 샘플의 다른 속성을 설정해야 합니다. 자세한 내용은 IMediaSample을 참조하세요.

기본 클래스에서 pStartTimepEndTime 매개 변수는 무시됩니다. 파생 클래스는 이러한 값을 사용할 수 있습니다. 예를 들어 Video Renderer 필터의 할당자는 이러한 값을 사용하여 DirectDraw 표면 간 전환을 동기화합니다.

메서드가 샘플을 기다려야 하는 경우 대기 중인 개체(CBaseAllocator::m_lCount)의 수를 증가시키고 세마포(CBaseAllocator::m_hSem)에서 WaitForSingleObject 함수를 호출합니다. 샘플을 사용할 수 있게 되면 할당자에서 CBaseAllocator::ReleaseBuffer 메서드를 호출하여 마포 수를 m_lCount 증가시키고(대기 중인 스레드를 해제) m_lCount 다시 0으로 설정합니다.

요구 사항

요구 사항
헤더
Amfilter.h(Streams.h 포함)
라이브러리
Strmbase.lib(소매 빌드);
Strmbasd.lib(디버그 빌드)

추가 정보

CBaseAllocator 클래스